在 Electron 版本 1.X 中,如何从一个 BrowserWindow 发出事件并在另一个 BrowserWindow 中使用它?
In Electron version 1.X, how can I emit an event from one BrowserWindow and consume it in another BrowserWindow?
在 Electron 版本 1.X 中,如何从一个 BrowserWindow 发出事件并在另一个 BrowserWindow 中使用它?
我正在使用 Electron 版本 1.2.1。
实现此目的的一种方法是使用 ipcRenderer
在 BrowserWindow
实例和 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'
});
在您的其他 window 实例中,您将有一些 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 了解更多信息。
从 child_window 到它的 parent_window 使用 webContents 的通信示例:
里面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 进行通信。
在 Electron 版本 1.X 中,如何从一个 BrowserWindow 发出事件并在另一个 BrowserWindow 中使用它?
我正在使用 Electron 版本 1.2.1。
实现此目的的一种方法是使用 ipcRenderer
在 BrowserWindow
实例和 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'
});
在您的其他 window 实例中,您将有一些 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 了解更多信息。
从 child_window 到它的 parent_window 使用 webContents 的通信示例:
里面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 进行通信。