首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在启用contextIsolation的情况下将主进程中定义的变量传递给渲染器BrowserView?

无法在启用contextIsolation的情况下将主进程中定义的变量传递给渲染器BrowserView?
EN

Stack Overflow用户
提问于 2020-01-23 02:19:57
回答 2查看 606关注 0票数 0

我正在尝试创建一个自定义菜单/标题栏,但我使用BrowserView将其添加到主BrowserWindow中,而不仅仅是使用BrowserWindow.loadURL()方法(出于某些原因)。

但是,当启用上下文隔离时,这似乎会导致加载预加载脚本时出现问题。

我所拥有的:

main.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
const { remote } = require('electron')
window.mainWindow = remote.getCurrentWindow();

在渲染器脚本中:

代码语言:javascript
运行
复制
console.log(window.mainWindow); // undefined

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

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

如果我只使用mainWindow.loadURL(filePath)加载menu.html,一切都很好,但这不是我想要做的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 04:21:14

好吧,我想通了我的问题:

我在BrowserWindow中加载预加载脚本。我需要将它加载到BrowserView中,然后它才能工作。

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 03:48:15

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59866014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档