在 Electron 中的两个渲染器进程之间进行通信
Posted
技术标签:
【中文标题】在 Electron 中的两个渲染器进程之间进行通信【英文标题】:Communicating between two renderer processes in Electron 【发布时间】:2016-12-08 12:07:32 【问题描述】:我正在编写一个 Eletron 程序。在程序中有一个由主进程(main.js)创建的索引窗口。在此窗口中有一个文件(图像)列表。当我单击该列表中的一个文件时,我想启动第二个显示该文件的窗口。 第二个窗口由索引窗口 (index.js) 的渲染器进程启动。 index-window的renderer进程和第二个window的renderer进程如何通信?
代码:
从 main.js 中的主进程创建索引窗口:
let win;
function createWindow()
// Create the browser window.
win = new BrowserWindow(width: 1024, height: 768, minWidth: 800, minHeight: 600, show: false, icon: 'files/images/icon.png');
win.loadURL(`file://$__dirname/files/html/index.html`);
win.once('ready-to-show', () =>
win.show()
)
// Emitted when the window is closed.
win.on('closed', () =>
win = null;
);
app.on('ready', createWindow);
在 index.html 中启动 index.js(renderer 进程):
<script src="../javascript/index.js"></script>
在 index.js 中,function create_sprite_window()
被调用,它创建了一个子窗口:
const fs = require('fs');
const path = require('path');
const BrowserWindow = require('electron').remote
let child_windows = [];
function create_child_window(URL, width, height)
let rem_win = require('electron').remote.getCurrentWindow();
let new_win = new BrowserWindow(width: width, height: height, minWidth: 400, minHeight: 300, show: false, parent: rem_win, minimizable: true, maximizable: true, skipTaskbar: true);
child_windows[child_windows.length] = new_win;
console.log(child_windows);
new_win.loadURL(URL);
new_win.once('ready-to-show', () =>
new_win.show()
)
return new_win;
function create_sprite_window()
new_win = create_child_window(`file://$__dirname/../html/sprite_manager.html`, 800, 400);
子窗口存储在数组child_windows
中。
是否可以将图像的路径发送到第二个窗口,或者编辑第二个窗口的<img>
标签(将第二个窗口中<img>
标签的源设置为图像getElementById.src = path;
) 来自索引窗口?
【问题讨论】:
【参考方案1】:我自己找到了答案。 为了在第二个渲染器窗口中显示正确的图像,我向包含图像路径的 URL 添加了一个 GET 参数。
【讨论】:
它可能有效,但不是电子的最佳解决方案。一种方法是使用ipcMain
和 ipcRenderer
模块。这样,您可以从索引文件渲染器发送文件主进程的路径。然后主进程可以使用该文件路径打开一个新窗口
***.com/questions/44972482/…***.com/questions/41225572/…***.com/questions/43859394/…***.com/questions/47416799/…以上是关于在 Electron 中的两个渲染器进程之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章