如何将上下文传递到自定义对话框中?

时间:2019-10-19 00:50:37

标签: node.js electron

因此,在某些页面中,我希望弹出对话框/模式并根据情况显示一些自定义HTML,我想到的最简单的方法是创建全新 BrowserWindow并根据情况分别加载到popup.html中。我在做一些事情时需要一些帮助。

首先:我似乎找不到任何方法传递给浏览器窗口,我已经尝试了以下方法:

let window = new electron.remote.BrowserWindow({...});
let context = "sample context";
window.webContents.executeJavaScript(`electron.remote.getCurrentWindow().context = ${context};`);
window.context = context;

popup.html的脚本中,它无法访问:

electron.remote.getCurrentWindow().context;
window.context;
document.context;

因为它们都返回未定义状态。

在尝试寻找某种方式通过测试的测试中,我发现我无法弄清楚如何访问TOP窗口。 例如,如果主窗口打开一个对话框,然后又打开一个对话框,那么主窗口如何获取显示所有其他窗口为ON-TOP的窗口?由于electron.remote.getCurrentWindow()仅返回该脚本不是顶级窗口的窗口。

1 个答案:

答案 0 :(得分:0)

所以一段时间后,我想出了如何做自己想做的事。

步骤1:

在加载对话框/弹出窗口的js文件中,您需要:

    const electron = require('electron'), path = require('path');
    let window = new electron.remote.BrowserWindow({...});
    let context = "sample context";
    window.loadURL(url.format({
        pathname: path.join(__dirname, "./file.html"),
        protocol: 'file:',
        slashes: true
    })).then(function(){
        window.webContents.send('store-data', context);
        window.show();
    })
    electron.ipcRenderer.on("callback", (event,val) => {
        window.destroy();
        // val is whatever the dialog sent back.
    });

步骤2:

在对话框/弹出窗口的js文件中,您需要:

    const electron = require('electron'), ipcRenderer = electron.ipcRenderer;
    let callback = function (value) {
        electron.remote.getCurrentWindow().getParentWindow().webContents.send('callback',value);
    };
    ipcRenderer.on('store-data', function (event, context) {
        console.log(context)//"sample context"
    });
    //Do whatever. And when you want to close the dialog/popup or send back input, just call callback(...);