Electron 渲染器不';使用ipc时,无法从其他渲染器接收数据

Electron 渲染器不';使用ipc时,无法从其他渲染器接收数据,electron,ipc,Electron,Ipc,我在使用ipc将数据从一个渲染器发送到另一个渲染器时遇到问题。我试图实现的是:将一个变量从index.js发送到cves.js。我保留了console.log输出以进行调试。我收到两条消息——“index.js发送更新目标操作系统消息。”和“main.js接收更新目标操作系统消息并发送目标操作系统消息”。但是我没有得到“cves.js接收targetOS” 我的代码文件在这里: 希望有人能帮我。刚刚学习electron并尝试构建一个用于学习目的的应用程序。我查看了您的代码&对我来说,问题似乎是,

我在使用ipc将数据从一个渲染器发送到另一个渲染器时遇到问题。我试图实现的是:将一个变量从index.js发送到cves.js。我保留了console.log输出以进行调试。我收到两条消息——“index.js发送更新目标操作系统消息。”和“main.js接收更新目标操作系统消息并发送目标操作系统消息”。但是我没有得到“cves.js接收targetOS”

我的代码文件在这里:


希望有人能帮我。刚刚学习electron并尝试构建一个用于学习目的的应用程序。

我查看了您的代码&对我来说,问题似乎是,您通过
主窗口
网络内容
目标发送到哪里

mainWindow
是文件
src/index.html
BrowserWindow
对象;但是您希望在
src/cves.html
浏览器窗口
对象上接收它

一种方法是更新代码,为
src/cves.html
main.js
上创建
BrowserWindow
对象(比如,
cvesWindow
)(当收到
updatetarget os
频道时)而不是在
index.js
中的
cell\u cves.addEventListener
方法中创建它

main.js
中的
updatetargetos
部分,将收到的值设置为
main.js
变量,比如
osGuess

然后,在您的
cves.js
文件中,您可以有如下内容:

 ipcRenderer.send('cves-loaded', true);
您可以在加载DOM内容后执行它。这将通知主进程CVES
浏览器窗口已加载。然后,
main.js
可以在如下事件上发送值:

ipcMain.on('cves-loaded', (event, arg) => {
  cvesWindow.webContents.send('targetOS', osGuess);
})
这样cves
浏览器窗口就会接收到它

通过上面的逻辑更新,我能够在
cves.html
上的
osname
元素上获得要显示的值


可能有更多的方法来实现这一点,但如果您只需要打开一个列出其他信息的对话框,我建议您使用一种方法。

嗨,尼尔,我尝试根据您的建议进行更改。但是,我仍然面临同样的问题,main.js从index.js接收数据,但是当main.js使用用于cves.html的BrowserWindow发送数据时,cves.js没有接收到数据。也许我在正确实施更改时犯了错误。修改后的代码位于:。另外,如果你能分享你的工作代码,这将是一个很大的帮助,我是Electron的新手。当然,如果你做了一个,你可以批准它将更新的代码放入你的存储库。看起来您正在使用
did finish load
触发事件。建议在导航完成后,它可以工作;我已经更新了它,以便在加载DOM时发送事件。希望有帮助。如果您有问题,请对请求进行评论。