繁体   English   中英

在 Electron 中,如何通过 preload.js 中定义的全局变量使 ipcRenderer 可用于多个渲染器进程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM