gpt4 book ai didi

javascript - 无法将主进程中定义的变量传递给启用了 contextIsolation 的渲染器 BrowserView?

转载 作者:行者123 更新时间:2023-12-03 12:41:59 25 4
gpt4 key购买 nike

我正在尝试创建自定义菜单/标题栏,但我使用 BrowserView 将其添加到主 BrowserWindow,而不是仅使用 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

我想我理解为什么它是未定义的,但我不清楚如果可能的话,如何与渲染器进程共享主进程变量。

我已经尝试过提到的 here (使用 webFrame.executeJavaScript() )但这似乎没有任何作用(我什至不确定 webFrame 应该是什么)。

如果我使用 mainWindow.loadURL(filePath) 加载 menu.html,一切正常但这不是我想做的。

最佳答案

contextBridge.exposeInMainWorld是启用上下文隔离时允许在预加载到渲染器上下文之间进行通信的接口(interface)。 https://www.electronjs.org/docs/api/context-bridge#contextbridgeexposeinmainworldapikey-api-experimental

但也应该注意它不能转发不可序列化的对象,也可能包括远程对象。同样,通过远程暴露整个对象是一个很大的安全漏洞,无论如何都会破坏上下文隔离,应该避免。您也可以引用有关远程模块的计划弃用讨论:https://github.com/electron/electron/issues/21408

关于javascript - 无法将主进程中定义的变量传递给启用了 contextIsolation 的渲染器 BrowserView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59866014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com