有三种方式可以让你在Electron
的BrowserWindow里集成(第三方)web内容,和,
和 BrowserViews
每个功能都略有不同,适用于不同的情况。
Iframe 在 Electron 中的行为与普通浏览器中类似。 在宿主页面的 Content Security Policy 允许范围内,一个 元素能在页面上显示外部网页。 要限制 标签中站点的功能数量,建议 使用 sandbox 属性 并且只允许您想要支持的功能。
WebViews
基于 Chromium 的 WebView,不被 Electron 明确支持。 我们不能保证WebView API 在未来版本的 Electron 中仍然可用。如果想要使用
标签,您需要在BrowserWindow 的 webPreferences
中设置 webviewTag
为 true
。
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
webviewTag:true
}
})
在新版本中这个标签会发生剧烈的结构变化,可能会影响应用程序的稳定性。 考虑切换到其他选择,如 iframe 和Electron的 BrowserView,或避免嵌入式内容 设计的架构。
BrowserView
被用来让 BrowserWindow 嵌入更多的 web 内容。 它就像一个子窗口,除了它的位置是相对于父窗口。 这意味着可以替代webview标签。
BrowserView不是 DOM 的一部分,而是由主进程创建和控制。 它们只是现有窗口之上的另一层 Web 内容。 这意味着它们与您自己的 BrowserWindow 内容完全分离,并且它们的位置不受 DOM 或 CSS 的控制,而是通过在主进程中设置边界来控制其位置。 相反,它通过在主进程中设置界面来控制 。
BrowserViews
提供对其内容的最大控制,因为它们实现 webContents
的方式与 BrowserWindow 实现内容的方式类似。 但是,由于BrowserViews
不是 DOM
的一部分,而是覆盖在它们之上,因此您必须手动管理它们的位置。管理方式也非常简单
// 在主进程中.
const { app, BrowserView, BrowserWindow } = require('electron')
app.whenReady().then(() => {
const win = new BrowserWindow({ width: 800, height: 600 })
const view = new BrowserView() //创建子窗口
win.setBrowserView(view) //自窗口设置嵌入式子窗口
view.setBounds({ x: 0, y: 0, width: 300, height: 300 }) //设置x,y坐标,窗口宽度和高度
view.webContents.loadURL('https://www.electronjs.org') //加载页面
//view.webContents 子窗口通过webContents可以实现最大控制
//view.setAutoResize(options)
//width boolean(可选) - 如果为true,视图宽度跟随窗口变化。 默认值为 false
//height boolean(可选) - 如果 true,视图的高度将增长和缩小 与窗口。 默认值为 false
//horizontal boolean (可选) - 如果为 true,视图的x轴和宽度将随着窗口的大小变化等比例缩放。 默认值为 false
//vertical boolean(可选) - 如果 true,视图的y位置和高度将增长 和收缩比例与窗口。 默认值为 false
})
在使用过程中如果需要使用嵌入Web
页面,可以使用BrowserView
,因为BrowserView对新版本的Electron支持性更好,而且拥有窗口化最大控制权限