2017-11-21 3 views
0

私はElectronのメインプロセスから複数のウィンドウを作成し、それらの間でメッセージを渡す必要があります。レンダラからレンダラへメッセージを送るために私が遭遇した唯一の方法は、それをメインプロセスにバウンスさせることです。レンダラーAからrenderBにメッセージを直接送信する方法はありますか?Electronの2つのレンダラープロセス間で直接通信

+0

私はElectronのIPC機能についてはわかりません。 –

答えて

0

通信システムのロジックによって異なります。例えば

あなたは常にBrowserWindow4にBrowserWindow2からデータを送信する必要がある場合、あなたはBrowserWindow4とBrowserWindow2でipcRendereripcMainを宣言することができます。あなたのメッセージ受信

あなたはすべての人に、すべてのBrowserWindowsから送信する必要があります場合は、私が(親戚にIDを使用して)BrowserWindowsにメインプロセスとディスパッチメッセージを使用するためにあなたをアドバイス

ipcMain.on('asynchronous-message', (event, arg) => { 
    //manage data 
} 

そして、あなたのメッセージの送信者中:

ipcRenderer.send('asynchronous-message', message) 

ipcMain doc

ipcRenderer doc

+0

BrowserWindow4でdeclare ipcMainとはどういう意味ですか?より具体的にお願いしますか? – hawk

+0

私はいくつかの情報を追加しました。 – emish89

0
ように

または別の、メインプロセスが参加しているが、二つの窓のレンダラプロセス間で通信する簡単な方法のいくつかの種類で達成することができます。

  • メインプロセスでは、ウィンドウ参照をグローバルオブジェクトのプロパティとして定義します。

  • 各レンダラープロセスで、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> 
関連する問題