第一个月,我对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”。
答案 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文件中。