SetInterval是否可以阻塞頁面中的其他腳本?JavaScript的setInterval塊可以執行線程嗎?
我正在開發一個項目,將Gmail相關書籤轉換爲Google Chrome擴展程序。小書籤使用gmail greasemonkey API與gmail頁面進行交互。 API的JavaScript對象是要加載的Gmail頁面的最後部分之一,並通過XMLHttpRequest加載到頁面中。由於我需要訪問此對象,並且全局JavaScript變量對擴展內容腳本隱藏,因此我在gmail頁面中注入了一個腳本,用於輪詢變量的定義,然後訪問它。我正在使用setInterval函數進行輪詢。這大約80%的時間工作。其餘時間輪詢功能保持輪詢,直到達到我設置的限制,並且從未在頁面中定義greasemonkey API對象。
注入腳本示例:
var attemptCount = 0;
var attemptLoad = function(callback) {
if (typeof(gmonkey) != "undefined"){
clearInterval(intervalId); // unregister this function for interval execution.
gmonkey.load('1.0', function (gmail) {
self.gmail = gmail;
if (callback) { callback(); }
});
}
else {
attemptCount ++;
console.log("Gmonkey not yet loaded: " + attemptCount);
if (attemptCount > 30) {
console.log("Could not fing Gmonkey in the gmail page after thirty seconds. Aborting");
clearInterval(intervalId); // unregister this function for interval execution.
};
}
};
var intervalId = setInterval(function(){attemptLoad(callback);}, 1000);
那麼,在執行回調期間,不能執行其他代碼(事件處理程序,超時回調函數),因爲JavaScript是單線程的......如果這就是你的意思。 – 2012-08-15 23:09:24