javascript - 在 Electron 中,如何通过 preload.js 中定义的全局变量使 ipcRenderer 可用于多个渲染器进程?
问题描述
为了维护安全性,contextIsolation: false
我通常ipcRenderer
通过创建一个全局变量来提供渲染器进程,preload.js
如下所示:
const electron = require('electron');
process.once('loaded', () => {
global.ipcRenderer = electron.ipcRenderer;
});
然后,ipcRenderer
可以直接在我的(主)渲染器进程中使用:
<script>
...
ipcRenderer.send(...)
...
</script>
但是,当我打开第二个窗口(即,我正在创建第二个渲染器进程)时,ipcRenderer
没有定义。为什么第二个渲染器进程不能访问我的全局变量?我该如何解决这个问题?非常感谢您的帮助!
解决方案
我已经尝试了很多事情,我认为我已经找到了解决方案。但是,我不知道这是否是“最佳实践”的方式。来自社区的任何意见都将受到高度赞赏。
如果第二个渲染器进程ipcRenderer
也使用相同的preload.js
. 我认为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()
})
}
推荐阅读
- database - 规范覆盖后的候选键
- amazon-web-services - AWS hmac 加密差异
- javascript - JavaScript 将函数传递给 map();
- python - 检查是否通过 pip 专门安装了一个包
- r - 在R数据框中提取以@开头的单词并保存为新列
- reactjs - 如何在 React 中直接使用函数?
- python - OrderedDict 在 Python 3.7 中会变得多余吗?
- python - 如何为 attention_ocr 创建与 FSNS 数据集格式相同的数据集?
- google-cloud-platform - 谷歌云平台:保留地址无故解除关联
- owl - 如何限制其数据属性断言必须用OWL填充的类?