javascript - 同一个 Electron 窗口中的两个浏览器
问题描述
我想要一个电子窗口,分为两部分:
- 左边部分是
BrowserWindow
加载https://gmail.com 右边的部分也是另一个
BrowserWindow
加载Gmail,但我希望这两个浏览器是“独立的”,即cookies/LocalStorage/等。应该是独立的(就像我们有一个普通的 Chrome 窗口和一个隐身窗口);因此允许在左侧连接一个 Gmail 帐户/在右侧连接另一个帐户单个 Electron 窗口顶部的一些其他 UI 按钮。
此代码有效,但它创建了 2 个窗口而不是一个:
const { app, BrowserWindow } = require('electron')
const path = require('path')
app.once('ready', () => {
let win = new BrowserWindow({show: false})
win.once('show', () => { win.webContents.executeJavaScript('validateFlights()') })
win.loadURL('https://www.gmail.com')
win.show()
let win2 = new BrowserWindow({show: false})
win2.once('show', () => { win.webContents.executeJavaScript('validateFlights()') })
win2.loadURL('https://www.gmail.com')
win2.show()
})
如何将它们放在一个窗口中?
解决方案
有点晚了,但是要在一个窗口中添加两个浏览器,您必须BrowserWindow.addBrowserView
使用BrowserWindow.setBrowserView
. 您将获得以下信息:
const { BrowserView, BrowserWindow, app } = require('electron')
function twoViews () {
const win = new BrowserWindow({ width: 800, height: 600 })
const view = new BrowserView()
win.addBrowserView(view)
view.setBounds({ x: 0, y: 0, width: 400, height: 300 })
view.webContents.loadURL('https://electronjs.org')
const secondView = new BrowserView()
win.addBrowserView(secondView)
secondView.setBounds({ x: 400, y: 0, width: 400, height: 300 })
secondView.webContents.loadURL('https://electronjs.org')
app.on('window-all-closed', () => {
win.removeBrowserView(secondView)
win.removeBrowserView(view)
app.quit()
})
}
app.whenReady().then(twoViews)
创建两个BrowserView
对象后,只需将它们添加到窗口即可。您还需要在拆除应用程序时删除视图。如果不这样做,您可能会遇到分段错误。
推荐阅读
- java - 如何使用java jersey将示例json对象添加到swagger body?
- android-studio - ubuntu 18.04 上的 Pepper android sdk 模拟器错误
- angularjs - 从属性文件加载锚标记时,ui-sref 无法正常工作
- swift - 我想在不使用标签栏控制器的情况下制作自定义标签栏
- reactjs - serviceWorker.js 中未定义窗口
- python-3.x - 将字典附加到嵌套字典 Python 3.6
- javascript - 如何显示来自 JSON 字符串转换数组的数据
- python - 如何有效地基于 and 或 params 在 Python 中拆分字符串?
- node.js - .env 使用 vscode 和 dotenv npm 调试断点
- javascript - 在标签名称中创建新 HTML 属性的问题