电子传递创建者窗口ID到新的BrowserWindow

时间:2018-09-06 05:18:53

标签: javascript electron

我正在制作一个电子应用程序,该应用程序在后台的网站上运行自定义脚本。该代码正在由主窗口创建的第二个窗口中执行。然后,第二个窗口创建另一个隐藏的窗口,在该窗口中将加载网站并运行自定义脚本。我需要能够将第二个窗口的窗口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时,它是未定义的。如何从隐藏窗口中识别出第二个窗口,以便向其发送消息?

1 个答案:

答案 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', {});

webContents.id Docs