在Electron版本1.X中,如何从一个BrowserWindow发出一个事件并在另一个BrowserWindow中使用它?
我正在使用Electron版本1.2.1。
答案 0 :(得分: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'
});
在您的其他窗口实例中,您可以使用一些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。