跳至主要內容

從 BrowserView 遷移至 WebContentsView

·3 分鐘閱讀

BrowserViewElectron 30 起已棄用,並由 WebContentView 取代。幸運的是,遷移過程相當輕鬆。


Electron 正從 BrowserView 轉移到 WebContentsView,以與 Chromium 的 UI 框架 Views API 對齊。WebContentsView 提供一個直接與 Chromium 渲染管道綁定的可重複使用檢視,簡化了未來升級,並開啟了開發人員將非 Web UI 元素整合到其 Electron 應用程式的可能性。透過採用 WebContentsView,應用程式不僅為即將到來的更新做好準備,還可以從長遠來看減少程式碼複雜性和潛在錯誤。

熟悉 BrowserWindows 和 BrowserViews 的開發人員應注意,BrowserWindowWebContentsView 分別是繼承自 BaseWindowView 基底類別的子類別。若要完全了解可用的實例變數和方法,請務必查閱這些基底類別的文件。

遷移步驟

1. 將 Electron 升級至 30.0.0 或更高版本

警告

Electron 版本可能包含會影響您的應用程式的重大變更。最好在繼續進行此遷移的其餘步驟之前,在您的應用程式上測試並完成 Electron 升級。可以在此處以及 Electron 部落格上每個主要版本的發布說明中找到每個 Electron 主要版本的重大變更清單。

2. 熟悉您的應用程式使用 BrowserViews 的位置

執行此操作的一種方法是在您的程式碼庫中搜尋 new BrowserView(。這應該讓您了解您的應用程式如何使用 BrowserViews 以及需要遷移的呼叫位置數量。

提示

在大多數情況下,您的應用程式實例化新 BrowserViews 的每個實例都可以與其他實例隔離進行遷移。

3. 遷移 BrowserView 的每個用法

  1. 遷移實例化。這應該相當簡單,因為 WebContentsViewBrowserView 的建構函式基本上具有相同的形狀。兩者都透過 webPreferences 參數接受 WebPreferences

    - this.tabBar = new BrowserView({
    + this.tabBar = new WebContentsView({
    資訊

    依預設,WebContentsView 以白色背景實例化,而 BrowserView 以透明背景實例化。若要在 WebContentsView 中取得透明背景,請將其背景顏色設定為 RGBA 十六進位值,並將 alpha(不透明度)通道設定為 00

    + this.webContentsView.setBackgroundColor("#00000000");
  2. 遷移 BrowserView 新增至其父視窗的位置。

    - this.browserWindow.addBrowserView(this.tabBar)
    + this.browserWindow.contentView.addChildView(this.tabBar);
  3. 遷移父視窗上的 BrowserView 實例方法呼叫。

    舊方法新方法注意事項
    win.setBrowserViewwin.contentView.removeChildView + win.contentView.addChildView
    win.getBrowserViewwin.contentView.children
    win.removeBrowserViewwin.contentView.removeChildView
    win.setTopBrowserViewwin.contentView.addChildView在現有檢視上呼叫 addChildView 會將其重新排序到頂端。
    win.getBrowserViewswin.contentView.children
  4. setAutoResize 實例方法遷移至調整大小接聽程式。

    - this.browserView.setAutoResize({
    - vertical: true,
    - })

    + this.browserWindow.on('resize', () => {
    + if (!this.browserWindow || !this.webContentsView) {
    + return;
    + }
    + const bounds = this.browserWindow.getBounds();
    + this.webContentsView.setBounds({
    + x: 0,
    + y: 0,
    + width: bounds.width,
    + height: bounds.height,
    + });
    + });
    提示

    browserView.webContents 的所有現有用法和實例方法 browserView.setBoundsbrowserView.getBoundsbrowserView.setBackgroundColor 都不需要遷移,並且應該可以與 WebContentsView 實例開箱即用!

4. 測試並提交您的變更

遇到問題?請檢查 Electron 問題追蹤器上的 WebContentsView 標籤,查看您遇到的問題是否已回報。如果您在那裡沒有看到您的問題,請隨時新增錯誤報告。包含測試案例 gist 將有助於我們更好地分類您的問題!

恭喜,您已遷移至 WebContentsViews!🎉