Javascript Can';是否将主进程中定义的变量传递给启用contextIsolation的渲染器BrowserView?
我试图创建一个自定义菜单/标题栏,但我正在使用BrowserView将其添加到主BrowserWindow中,而不仅仅是使用Javascript Can';是否将主进程中定义的变量传递给启用contextIsolation的渲染器BrowserView?,javascript,node.js,electron,Javascript,Node.js,Electron,我试图创建一个自定义菜单/标题栏,但我正在使用BrowserView将其添加到主BrowserWindow中,而不仅仅是使用BrowserWindow.loadURL()方法(出于某些原因) 这似乎会在启用上下文隔离时导致加载预加载脚本时出现问题 我所拥有的: main.js const mainWindow = new BrowserWindow({ frame: false, webPreferences: { nodeIntegration: false,
BrowserWindow.loadURL()
方法(出于某些原因)
这似乎会在启用上下文隔离时导致加载预加载脚本时出现问题
我所拥有的:
main.js
const mainWindow = new BrowserWindow({
frame: false,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
preload: path.join(__dirname, "preload.js")
}
})
const bView = new BrowserView();
bView.setBounds(//set my bounds);
bView.webContext.loadURL(path.join(__dirname, "menu.html"));
mainWindow.setBrowserView(bView);
preload.js
const { remote } = require('electron')
window.mainWindow = remote.getCurrentWindow();
在渲染器脚本中:
console.log(window.mainWindow); // undefined
我想我理解为什么它是未定义的,但我不清楚如果可能,如何与渲染器进程共享主进程变量
我尝试过上面提到的方法(使用webFrame.executeJavaScript()
),但似乎没有任何效果(我甚至不确定webFrame
应该是什么)
如果我只是使用
mainWindow.loadURL(filePath)
加载menu.html,一切都可以正常工作,但这不是我想要做的。contextBridge.exposeInMainWorld
是一个接口,允许在启用上下文隔离时预加载到渲染器上下文之间进行通信
但也应该注意,它将无法转发不可序列化的对象,可能还包括远程对象。另外,通过远程公开整个对象是一个巨大的安全漏洞,无论如何都会破坏上下文隔离,应该避免。您也可以参考有关远程模块的计划弃用讨论:好吧,我解决了我的问题: 我正在浏览器窗口中加载预加载脚本。我需要将它加载到BrowserView中,然后它就可以工作了