gpt4 book ai didi

javascript - 在 Electron 中的两个渲染器进程之间直接通信

转载 作者:行者123 更新时间:2023-12-04 22:28:07 25 4
gpt4 key购买 nike

我从 Electron 的主进程创建了多个窗口,需要在它们之间传递消息。我知道将消息从 rendererA 发送到 rendererB 的唯一方法是将其反弹到主进程。有没有办法直接从渲染器A向渲染器B发送消息?

最佳答案

在某种程度上,主进程必须参与,但两个窗口的渲染器进程之间的通信可以通过某种直接的方式实现:

  • 在主进程中,将窗口引用定义为全局对象的属性;
  • 在每个渲染器进程中,通过remote.getGlobal()访问你要发送消息的窗口的引用,然后使用send()方法;
  • 使用 ipcRenderer.on() 通常的方式在每个渲染器进程中接收消息。

  • 这是 quick example of an Electron app就是这样做的:

    main.js :

    const { app, BrowserWindow } = require ('electron');
    global.window1 = null;
    global.window2 = null;
    function onAppReady ()
    {
    window1 = new BrowserWindow ({ width: 600, height: 500 });
    window1.loadURL (`file://${__dirname}/index1.html`);
    window1.webContents.openDevTools ();
    window1.on ('closed', () => { window1 = null; });
    //
    window2 = new BrowserWindow ({ width: 500, height: 600 });
    window2.loadURL (`file://${__dirname}/index2.html`);
    window2.webContents.openDevTools ();
    window2.on ('closed', () => { window2 = null; });
    }
    app.on ('ready', onAppReady);
    app.on ('window-all-closed', () => { app.quit (); });

    index1.html :

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Window 1</title>
    </head>
    <body>
    <h1>Window 1</h1>
    <button type="button" class="send-message">Send Message to Window 2</button>
    <script>
    const { remote, ipcRenderer } = require ('electron');
    //
    let button = document.querySelector ('.send-message');
    button.addEventListener ('click', () =>
    {
    let window2 = remote.getGlobal ('window2');
    if (window2) window2.webContents.send ('message', "Message from Window 1");
    });
    //
    ipcRenderer.on ('message', (event, message) => { console.log (message); });
    </script>
    </body>
    </html>

    index2.html :

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Window 2</title>
    </head>
    <body>
    <h1>Window 2</h1>
    <button type="button" class="send-message">Send Message to Window 1</button>
    <script>
    const { remote, ipcRenderer } = require ('electron');
    //
    let button = document.querySelector ('.send-message');
    button.addEventListener ('click', () =>
    {
    let window1 = remote.getGlobal ('window1');
    if (window1) window1.webContents.send ('message', "Message from Window 2");
    });
    //
    ipcRenderer.on ('message', (event, message) => { console.log (message); });
    </script>
    </body>
    </html>

    关于javascript - 在 Electron 中的两个渲染器进程之间直接通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416799/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com