![](/img/trans.png)
[英]How to call function defined in preload.js from renderer process in electron
[英]In Electron, how to make ipcRenderer available to multiple renderer processes via global variable defined in preload.js?
为了通过contextIsolation: false
维护安全性,我通常通过在preload.js
中创建一个全局变量来使ipcRenderer
可用于渲染器进程,如下所示:
const electron = require('electron');
process.once('loaded', () => {
global.ipcRenderer = electron.ipcRenderer;
});
然后, ipcRenderer
可以直接在我的(主)渲染器进程中使用:
<script>
...
ipcRenderer.send(...)
...
</script>
但是,当我打开第二个 window(即,我正在创建第二个渲染器进程)时,没有定义ipcRenderer
。 为什么第二个渲染器进程不能访问我的全局变量? 我该如何解决这个问题? 非常感谢您的帮助!
我已经尝试了很多事情,我认为我已经找到了解决方案。 但是,我不知道这是否是“最佳实践”的方式。 来自社区的任何意见都将受到高度赞赏。
如果第二个渲染器进程也使用相同的preload.js
,则它可以访问全局变量ipcRenderer
。 我认为再次使用preload.js
会有些多余甚至是错误的,但它解决了问题。 这是有效的代码:
function openModal() {
let modalWin = new BrowserWindow({
parent: win,
modal: true,
width: 400,
height: 300,
show: false,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: false
}
})
modalWin.loadFile('modal.html');
modalWin.once('ready-to-show', () => {
modalWin.show()
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.