2017-05-02 18 views
1

私は複数のウィンドウがURLのプールからURLを読み込み、ipcRenderを使って情報を返す電子アプリケーションを作りたいと思っています。電子複数ウィンドウ通信

main.js:

function foo(){ 
    var urls = [ urls ....] 

    for(var i = 0; i < 3; i++){ 
     var window = new BrowserWindow({ 
      webPreferences: { 
       preload: "preload.js" 
      } 
     }) 

     window.webContents.on("did-finish-load"), function(){ 
      window.webcontents.executeJavascript("helloWorld()") 
      console.log(i) 
     } 

     // Omitted some checks 
     window.load(urls.shift()) 
    } 

    ipc.on('helloworld', function(event, data){ 
     console.log(data) 
     if (urls.length >= 1){ 
      event.returnValue = urls.shift(); 
     } else { 
      event.returnValue = 'done' 
     } 
    }) 
} 
app.on('ready', foo) 

preload.js

helloWorld = function(){ 
    var result = ipc.sendSync('helloWorld', 'hey there') 
    if (result != done){ 
     window.location = result; 
    } 
} 

出力:そこ 2heyが 2heyが 2hey

私のデザインは、次のようになります。 ...

現在のコードの種類はうまくいきます:ページのロードが完了してhelloWorld関数が実行されると、URLのロードが継続され、ipcMainからデータを取得できました。

しかし、3つのウィンドウが非同期で動作することを期待しているのではなく、3つのウィンドウのうち1つのみがこれを実行しています。他の2つのウィンドウは最初のウェブサイトを読み込んでいるだけで、何もしません。

なぜこれが起こっていますか、これを実装するための適切な方法は何でしょうか?

ありがとうございます!

答えて

1

did-finish-loadのコールバック関数内の変数windowには、最後に作成されたBrowserWindowインスタンスを常に指しています。

Why? Scope.

あなたは電子を使用しているので、あなたはletの代わりvarwindowを宣言することで簡単にこの問題を解決することができるはずです。

+0

ありがとうございました!!! – user1948847

関連する問題