2011-05-14 147 views
0

在我的擴展中,噹噹前選項卡網址位於我的目標網址列表中時,我發送了一些注入碼。這裏的代碼是奇怪的Chrome擴展javascript問題

chrome.tabs.onUpdated.addListener(function(tabId, info) { 
if(info.status == "complete") { 
var tabUrl = ""; 
var run = false; 
chrome.tabs.get(tabId, function(tab) { 
    tabUrl = tab.url; 
}); 
var storedList = localStorage["GAR_ExcList"]; 
if(!storedList) storedList = ""; 
var storedListArray = storedList.split("\n"); 
for(var i = 0; i < storedListArray.length; i++) { 
    var ind = tabUrl.indexOf(storedListArray[i]); 
    alert("for " + i + " index is " + ind); 
    if(ind != -1) { 
    alert("Running"); 
    run = true; 
    break; 
    } 
} 

if(run) { 
    chrome.tabs.executeScript(tabId, { file: "js/jquery-1.6.1.min.js" }, function() { 
    chrome.tabs.executeScript(tabId, { file: "js/inject.js"}); 
    }); 
} 
else { 
    alert("excluding"); 
} 
}}); 

儘管這段代碼非常好。出於某種原因,當我在for循環中註釋掉警報時,我得到run = false,並收到最後一次警報,我不應該這樣做。

有沒有人見過這樣的事情?很感謝任何形式的幫助。

最佳,

+0

'console.log'比'alert'好。使用它並嘗試打印tabUrl和storedListArray。 – JiminP 2011-05-14 02:03:56

回答

1

相反的:

chrome.tabs.onUpdated.addListener(function(tabId, info) { 
    ... 
    var tabUrl = ""; 
    chrome.tabs.get(tabId, function(tab) { 
     tabUrl = tab.url; 
    }); 

嘗試:

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) { 
    ... 
    var tabUrl = tab.url; 

chrome.tabs.get()是異步的,所以你需要把代碼的其餘部分其回調中,如果您使用此做法。

+0

謝謝。事實證明異步調用是罪魁禍首。 – artsince 2011-05-14 07:46:47