从 BrowserView 迁移到 WebContentsView
BrowserView
自Electron 30以来已被弃用,并被 WebContentView
取代。值得庆幸的是,迁移过程相当轻松。
Electron 正在从BrowserView
迁移到WebContentsView
,以与 Chromium 的 UI 框架Views API保持一致。WebContentsView
提供了一个可重用的视图,它直接与 Chromium 的渲染管道相关联,简化了未来的升级,并为开发人员将非 Web UI 元素集成到其 Electron 应用程序中打开了大门。通过采用 WebContentsView
,应用程序不仅为即将到来的更新做好了准备,而且从长远来看,还可以从降低的代码复杂性和更少的潜在错误中获益。
熟悉 BrowserWindow 和 BrowserView 的开发人员应注意,BrowserWindow
和 WebContentsView
分别是从BaseWindow
和View
基类继承的子类。要完全理解可用的实例变量和方法,请务必查阅这些基类的文档。
迁移步骤
1. 将 Electron 升级到 30.0.0 或更高版本
Electron 版本可能包含影响您应用程序的重大更改。最好先在您的应用程序上测试并应用 Electron 升级,然后再继续进行此迁移的其余部分。每个 Electron 主要版本的重大更改列表可以在此处找到,也可以在 Electron 博客上每个主要版本的发行说明中找到。
2. 熟悉您的应用程序使用 BrowserView 的位置
一种方法是在您的代码库中搜索 new BrowserView(
。这应该让您了解您的应用程序如何使用 BrowserView 以及需要迁移的调用站点数量。
在大多数情况下,您的应用程序实例化新 BrowserView 的每个实例都可以与其他实例隔离迁移。
3. 迁移 BrowserView
的每个用法
-
迁移实例化。这应该相当简单,因为WebContentsView 和BrowserView 的构造函数基本上具有相同的形状。两者都通过
webPreferences
参数接受WebPreferences。- this.tabBar = new BrowserView({
+ this.tabBar = new WebContentsView({信息默认情况下,
WebContentsView
实例化时具有白色背景,而BrowserView
实例化时具有透明背景。要在WebContentsView
中获得透明背景,请将其背景颜色设置为 RGBA 十六进制值,并将 alpha(不透明度)通道设置为00
+ this.webContentsView.setBackgroundColor("#00000000");
-
迁移
BrowserView
添加到其父窗口的位置。- this.browserWindow.addBrowserView(this.tabBar)
+ this.browserWindow.contentView.addChildView(this.tabBar); -
迁移父窗口上的
BrowserView
实例方法调用。旧方法 新方法 备注 win.setBrowserView
win.contentView.removeChildView
+win.contentView.addChildView
win.getBrowserView
win.contentView.children
win.removeBrowserView
win.contentView.removeChildView
win.setTopBrowserView
win.contentView.addChildView
在现有视图上调用 addChildView
会将其重新排序到顶部。win.getBrowserViews
win.contentView.children
-
将
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.setBounds
、browserView.getBounds
和browserView.setBackgroundColor
都无需迁移,并且应该与WebContentsView
实例开箱即用!
4. 测试并提交您的更改
遇到问题?请查看 Electron 问题跟踪器上的 WebContentsView 标签,查看您遇到的问题是否已被报告。如果您在那里没有看到您的问题,请随时添加新的错误报告。包含测试用例 gist 将有助于我们更好地分类您的问题!
恭喜,您已迁移到 WebContentsView! 🎉