2015-04-21 63 views
0

我正在研究從擴展接收到地址的Chrome應用,並且應該使用webview標記和Chrome運行時在應用窗口中打開該URL API消息發送。如何使用chrome.runtime.onMessageExternal函數回調來更新DOM

我想獲得chrome.window.create回調函數來更新創建的index.html頁面。 雖然我沒有按計劃工作。

下面是代碼:

chrome.runtime.onMessageExternal.addListener(

function (request, sender, sendResponse) { 

    chrome.app.window.create(

     'index.html', 

     {PARAMETERS}, 

     function() { 

      //get 
      var thisWindow = document.querySelector("webview"); 

      thisWindow.setAttribute("src", request.url); 

     } 
    ); 
} 

index.html文件只是一個網頁視圖標籤和一些造型。

一旦收到消息,將打開一個空窗口。但是,當應用程序處於打開狀態時再次發送時,它會打開頁面,這意味着回調可能在創建之前嘗試訪問index.html文件?

感謝您的閱讀!

+0

其中是「文檔」變量被設置? – levi

+0

@levi感謝您的回覆。 index.html與腳本位於同一目錄中。據我所知,第一個參數是指這個索引文件,其中包含webview標記。另外,當應用程序窗口已經打開時,它會顯示頁面。 – Nim

回答

1

在執行創建的窗口onload事件(see here)之前調用回調函數。所以大概這個階段DOM尚不可用。你可以做的是,將你的修改綁定到創建的窗口事件中,從而確保DOM可用。

chrome.app.window.create(
    'index.html', 
    { 
     PARAMETERS 
    }, 
    function (createdWindow) { 
     var contentWindow = createdWindow.contentWindow; 
     contentWindow.onload = function() { 
      var thisWindow = contentWindow.document.querySelector("webview"); 
      thisWindow.setAttribute("src", request.url); 
     } 
    } 
); 
+0

謝謝。看起來它正在工作。我以前嘗試過這種方法,但沒有提到createdWindow參數。 – Nim

相關問題