Javascript 在Electron版本1.X中,如何从一个BrowserWindow发出事件并在另一个BrowserWindow中使用它?
在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.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很好,很高兴您找到了工作,这就是我在发表评论时的想法,基本上就是现在发布的答案所涵盖的内容,以防其他人正在寻找这个!