我正在制作一个电子应用程序,该应用程序在后台的网站上运行自定义脚本。该代码正在由主窗口创建的第二个窗口中执行。然后,第二个窗口创建另一个隐藏的窗口,在该窗口中将加载网站并运行自定义脚本。我需要能够将第二个窗口的窗口ID传递给隐藏窗口,以便自定义脚本运行完毕后,它可以将ipc消息专门发送回第二个窗口。
我在github上发现了一个问题,有人在2016年回答说,看来您可以分配自定义值来赢取,然后在新创建的窗口中读取它们,但是实现这一点我没有成功。
// In second window
const currentWindow = require('electron').remote.getCurrentWindow();
// Create hidden window
win = new BrowserWindow({ show: false });
win.creatorId = currentWindow.id; // CUSTOM: Set creator window ID
win.webContents.openDevTools();
win.webContents.on('dom-ready', () => {
// Load dependencies every time a new url is loaded
win.webContents.executeJavaScript(`
const currentWindow = require('electron').remote.getCurrentWindow();
alert(currentWindow.creatorId); // This is undefined :(
const { BrowserWindow } = require('electron').remote;
const ipc = require('electron').ipcRenderer;
window.$ = window.jQuery = require('jquery');
`);
});
...
worker.win.loadURL(`random.webpage`);
// Run custom script on a website and send the result back to the creator window
win.webContents.executeJavaScript(`
$(document).ready(function () {
BrowserWindow.fromId(currentWindow.creatorId).webContents.send('coolMessage', {});
});
`);
当我尝试读取win.creatorId时,它是未定义的。如何从隐藏窗口中识别出第二个窗口,以便向其发送消息?
答案 0 :(得分:1)
在您的win.webContents.executeJavaScript
中,您可以像下面这样在execute javascript函数中设置变量:
win.webContents.executeJavaScript("var creatorId = " + currentWindow.webContents.id + ";");
这意味着您可以删除:win.creatorId = currentWindow.id;
。并更改:
BrowserWindow.fromId(currentWindow.creatorId).webContents.send('coolMessage', {});
收件人:
BrowserWindow.fromId(creatorId).webContents.send('coolMessage', {});