2017-05-02 45 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有 。 ...

當前代碼的工作類型:它在頁面加載完成後一直加載url並執行helloWorld函數,並且我能夠從ipcMain獲取數據。

然而,只有1 3窗口正在做這件事,而不是我的3個窗口類的異步工作的期望。其他兩個窗口只是加載第一個網站,並沒有做任何其他事情。

爲什麼會發生這種情況,應該採取什麼措施來實現這一目標?

謝謝!

回答

1

回調函數中window變量的值did-finish-load不包含您的想法:它總是指向上次創建的BrowserWindow實例。

Why? Scope.

由於您使用的電子,你應該能夠通過聲明windowlet代替var輕鬆解決這個問題。

+0

非常感謝! – user1948847