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

Javascript 在Electron版本1.X中,如何从一个BrowserWindow发出事件并在另一个BrowserWindow中使用它?,javascript,chromium,electron,Javascript,Chromium,Electron,在Electron版本1.X中,如何从一个BrowserWindow发出事件并在另一个BrowserWindow中使用它 我使用的是Electron版本1.2.1。一种方法是使用IPC渲染器在浏览器窗口实例和主进程之间进行通信。例如,在主流程中,您可以有如下内容:- const electron = require('electron'); const app = electron.app; const BrowserWindow = ele

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


我使用的是Electron版本1.2.1。

一种方法是使用
IPC渲染器
浏览器窗口
实例和
主进程之间进行通信。例如,在主流程中,您可以有如下内容:-

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);
    });
然后,在第一个
main窗口
实例中,您可以使用
ipc渲染器
将消息组合在一起,如下所示:-

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
});

有关更多信息,请参阅。

从子窗口到父窗口的通信示例,使用:

  • 在父窗口内:

    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
    });
    
  • 在子窗口内:

    require('electron').remote.getCurrentWebContents().emit("event", "hello", "world");
    
使用此解决方案而不是单一解决方案的主要优点是,这些例程链接到child_窗口的本地上下文。因此,如果关闭子窗口并删除其对象,这些例程将被删除


您也可以使用相同的系统从父窗口到子窗口进行通信。

您可以使用
ipcrederer
发送到main,并且回复可以转到主进程中应有的其他窗口实例引用。咨询@Ownayres您应该将您的评论转换为答案。谢谢@VadimMacagon-忘记了这一点,昨天时间很短!添加了一些代码,应该涵盖这一点solution@OwenAyres谢谢,最后我使用“ipcRenderer.send()”从渲染进程中发出事件,并使用“ipcMain.on()”在主进程中侦听事件。@Kosmo很好,很高兴您找到了工作,这就是我在发表评论时的想法,基本上就是现在发布的答案所涵盖的内容,以防其他人正在寻找这个!