在Electron版本1.X中,如何从一个BrowserWindow发出一个事件并在另一个BrowserWindow中使用它?

时间:2016-06-02 12:41:47

标签: javascript chromium electron

在Electron版本1.X中,如何从一个BrowserWindow发出一个事件并在另一个BrowserWindow中使用它?

我正在使用Electron版本1.2.1。

2 个答案:

答案 0 :(得分:1)

您可以使用ipcRendererBrowserWindow个实例和main进程之间进行通信。例如,在主过程中,您可以使用以下内容: -

const electron          = require('electron');
const app               = electron.app;
const BrowserWindow     = electron.BrowserWindow;
let mainWindow, subWindow;

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    fullscreen: true
});

mainWindow.loadURL('file://' + __dirname + '/../index.html');

subWindow = new BrowserWindow(); // etc

electron.ipcMain
    .on('myMainMessage', function (event, data) {
        // data can be passed from browser window
        subWindow.webContents.send('myPassedMessage', data);
    });

然后,在第一个mainWindow实例中,您可以使用ipcRenderer将消息拼凑在一起,如下所示: -

var electron = require('electron');
var ipc = electron.ipcRenderer;

ipc.send('myMainMessage', {
    property: 'someValue'
});

在您的其他窗口实例中,您可以使用一些JavaScript来侦听其他触发器。这样的事情: -

var electron = require('electron');
var ipc = electron.ipcRenderer;

ipc.on('myPassedMessage', function (event, data) {
    console.log(data); // will be from the mainWindow instance
});

有关详细信息,请参阅the docs on the ipcRenderer section

答案 1 :(得分:0)

使用webContents从child_window到其parent_window的通信示例:

  • 在parent_window中:

    const BrowserWindow = require('electron').remote.BrowserWindow;
    
    var child_window = new BrowserWindow({ ... });
    
    child_window.webContents.on("event", function(arg1, arg2){
        console.log(arg1, arg2); // this will print inside parent_window devtools console
    });
    
  • 在child_window中:

    require('electron').remote.getCurrentWebContents().emit("event", "hello", "world");
    

使用此解决方案而不是IPC解决方案的主要优点是这些例程链接到child_window webContents的本地上下文。如果关闭child_window并删除其BrowserWindow对象,则删除这些例程。

您也可以使用相同的系统从parent_window传递到child_window。