Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';是否将主进程中定义的变量传递给启用contextIsolation的渲染器BrowserView?_Javascript_Node.js_Electron - Fatal编程技术网

Javascript Can';是否将主进程中定义的变量传递给启用contextIsolation的渲染器BrowserView?

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,

我试图创建一个自定义菜单/标题栏,但我正在使用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
我想我理解为什么它是未定义的,但我不清楚如果可能,如何与渲染器进程共享主进程变量

我尝试过上面提到的方法(使用
webFrame.executeJavaScript()
),但似乎没有任何效果(我甚至不确定
webFrame
应该是什么)


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

contextBridge.exposeInMainWorld
是一个接口,允许在启用上下文隔离时预加载到渲染器上下文之间进行通信


但也应该注意,它将无法转发不可序列化的对象,可能还包括远程对象。另外,通过远程公开整个对象是一个巨大的安全漏洞,无论如何都会破坏上下文隔离,应该避免。您也可以参考有关远程模块的计划弃用讨论:

好吧,我解决了我的问题:

我正在浏览器窗口中加载预加载脚本。我需要将它加载到BrowserView中,然后它就可以工作了