跳到主要内容

从 BrowserView 迁移到 WebContentsView

·3 分钟阅读

BrowserViewElectron 30以来已被弃用,并被 WebContentView 取代。值得庆幸的是,迁移过程相当轻松。


Electron 正在从BrowserView 迁移到WebContentsView,以与 Chromium 的 UI 框架Views API保持一致。WebContentsView 提供了一个可重用的视图,它直接与 Chromium 的渲染管道相关联,简化了未来的升级,并为开发人员将非 Web UI 元素集成到其 Electron 应用程序中打开了大门。通过采用 WebContentsView,应用程序不仅为即将到来的更新做好了准备,而且从长远来看,还可以从降低的代码复杂性和更少的潜在错误中获益。

熟悉 BrowserWindow 和 BrowserView 的开发人员应注意,BrowserWindowWebContentsView 分别是从BaseWindowView 基类继承的子类。要完全理解可用的实例变量和方法,请务必查阅这些基类的文档。

迁移步骤

1. 将 Electron 升级到 30.0.0 或更高版本

警告

Electron 版本可能包含影响您应用程序的重大更改。最好先在您的应用程序上测试并应用 Electron 升级,然后再继续进行此迁移的其余部分。每个 Electron 主要版本的重大更改列表可以在此处找到,也可以在 Electron 博客上每个主要版本的发行说明中找到。

2. 熟悉您的应用程序使用 BrowserView 的位置

一种方法是在您的代码库中搜索 new BrowserView(。这应该让您了解您的应用程序如何使用 BrowserView 以及需要迁移的调用站点数量。

提示

在大多数情况下,您的应用程序实例化新 BrowserView 的每个实例都可以与其他实例隔离迁移。

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 将有助于我们更好地分类您的问题!

恭喜,您已迁移到 WebContentsView! 🎉