电子IPC参考错误

时间:2018-07-15 11:00:15

标签: javascript electron ipc

第一个月,我对JavaScript完全陌生,在Electron中创建了一个简单的Win应用程序。我需要将信息从index.html / index.js发送到session.html。从主进程/菜单创建session.html时,我已经通过IPC成功地做到了。但是现在,当我从index.js创建新的BrowserWindow(session.html)时,出现了引用错误。尽管这似乎是一个非常简单的问题,但我似乎找不到解决方案。

因此,我执行此功能以创建一个新的BrowserWindow:

addWin = function() {
  addWindow = new BrowserWindow({
    show: false,
    width: 800,
    height: 600,
    title: 'Process'
  })

  addWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'session.html'),
    protocol: 'file:',
    slashes: true
  }))

  addWindow.once('ready-to-show', () => {
    addWindow.show()
  })

  addWindow.on('close', function() {
    addWindow = null
  })
}

同时通过IPC从提交的表单发送信息:

ipcRenderer.send('process:add', minutes)

主进程(main.js)理解我的消息并将其显示在控制台中”:

ipcMain.on('process:add', function(e, minutes){
console.log(apjoms)
addWindow.webContents.send('#minutes', minutes)})

但是,由于它没有对“ addWindow”的引用,因此session.html不会收到该消息,并且该应用会显示“ addWindow”的引用错误:

ipcRenderer.on('process:add', function(e, minutes) {
  var minutesText = document.createTextNode(minutes);
  li.appendChild(minutesText);
  ul.appendChild(li);
});

所以问题很简单-如何让main.js看到index.js中定义的“ addWindow”是什么意思?

P.S。我尝试在main.js中定义“ addWin”函数并将其设置为global,同时使用“ remote.getGlobal”在索引上执行该函数。该函数本身运行良好,但是主进程仍然看不到“ global.addWin”函数中的“ addWindow”。

1 个答案:

答案 0 :(得分:0)

您可以使用event.sender来访问webContents发送的事件。

ipcMain.on('process:add', (event, minutes) => {
  event.sender.send('#minutes', minutes)
})

阅读文档how to send message with ipcMain部分


顺便说一句,您可以简单地按照想要使用的方式来构造应用程序/代码。如果一个函数应该知道一个变量,它们通常必须共享相同的作用域。 因此,您只需将ipcMain侦听器和BrowserWindow初始化放在同一个js文件中。

相关问题