2016-03-05 60 views
1

我做的Chrome應用,並且我面臨着一個問題:Chrome應用executeScript與setTimeout的回調而不是等待

我第一次在注射的<webview>打開一個網站一個file.js

在這個file.js我有一個函數,執行返回值包括在setTimeout

問題是當我使用executeScript調用函數時,回調不會等待setTimeout的結尾,並且返回null

有人可以告訴我我該怎麼辦?謝謝!

(無setTimeout,它返回預期值)

//content of file.js 
function foo(){ 
    setTimeout(function(){ return {key:"value"}; }, 5000); 
} 

//I inject the file.js in the website 
webview.executeScript({file:"file.js"}, function(result){ console.log(result); }); 

//I call foo() in the website 
webview.executeScript({code:"foo();"}, function(result){ console.log(JSON.stringify(result)); }); 
+0

如果您使用的是「」,那麼它必須是應用程序,而不是擴展。你可否確認? – Xan

+0

是的,它實際上是一個應用程序。 –

回答

0

executeScript的回調將收到運行腳本的最後評估值 - 同步。

您不能等待異步事件(即setTimeout)。

你最好打賭就是用chrome.runtime.sendMessage將數據回傳給你。

+0

是的,非常好的命題,正是我想要的。在file.js的setTimeout中,我將'return ...'替換爲'chrome.runtime.sendMessage({key:「value」});.在myApp.js中,我放置了監聽器chrome.runtime.onMessage.addListener(function(request){console.log(JSON.stringify(request));});.非常感謝Xan :) –