2012-12-01 256 views
2

我正在編寫一個腳本,用於從頁面中序列提取信息,一般來說,我必須暫停JavaScript,但頁面會繼續加載,並且JavaScript會停止。睡眠/等待/暫停javascript

的setTimeout是沒有必要的,因爲腳本的其餘部分仍在運行

我需要它,以使腳本繼續其他腳本(我沒有訪問權限)後運行下載必要的數據到頁面(這需要3秒鐘)。

P.S.如果有什麼我拉信息從村 - 使用Mozilla的與extention「用戶腳本」

+3

而不是暫停腳本,我會觸發一個事件,並在js中的事件處理程序代碼中編寫我的邏輯。這種方式不依賴於秒數,即3或5或任何東西。 – Mandar

回答

1

正如前面的回答和評論所暗示的那樣,這樣做的正常方法是在腳本加載到setTimeout函數後,將要運行的代碼放入。例如,如果您擔心在等待時觸發事件處理程序並導致錯誤,則需要禁用事件處理程序(例如element.onclick = null),然後在超時功能內重新啓用它們。我想你也可以做這樣的事情:

var pause = false; 
... 
callExternalScript(); 
pause = true;  
setTimeout(function() { 
    pause = false; 
}, 3000); 
... 
function oneOfMyOtherFunctions() { 
    if (pause) return; 
    ... 
} 
... 

但這是凌亂的,因爲你必須包括if (pause) return在要禁用,而腳本暫停每個函數的開始。此外,您可能希望或不希望添加額外的代碼來運行腳本暫停時調用的所有這些函數,只要該腳本已被暫停。

+0

如果可以將setTimeout替換爲一旦另一個腳本完成後就會觸發的事件,根據Mandar的評論,那將是更可取的。 – Stuart

2

http://www.mosgortrans.org/pass3/我不明白爲什麼setTimeout在這裏沒有必要 - 這不正是你的描述:

setTimeout(function() { 
    // this code runs 3 seconds after the page loads 
}, 3000);