2014-09-22 69 views
0

我正在開發Chrome擴展程序,它需要在固定的時間段內運行一個函數,以便它可以使用動態頁面。如何以一定的時間間隔重新執行一個函數?

我用setInterval但只執行一次該函數,如果進行了修改,如下:

function sumfunc(){ 
    document.body.innerHTML = dosumthin(document.body.innerHTML,false); 
    setInterval(sumfunc(),1000); 
} 

卻使調用堆棧這將落後於網頁,使之看起來像從未頁面完成加載。

+0

這個問題可以用'sumfunc的()''而不是sumfunc' – yunandtidus 2014-09-22 13:31:52

回答

2

刪除()

setTimeout(sumfunc,1000); 

setTimeout()的第一個參數取一個函數定義,而不是一個的執行。

當您在sumfunc中執行sumfunc時,這將導致立即無限遞歸,這可能會導致堆棧溢出,如您所描述的。


因此替換爲以下代碼:

function sumfunc(){ 
    document.body.innerHTML = dosumthin(document.body.innerHTML,false); 
    setTimeout(sumfunc,1000); 
} 
+0

驚人的怎麼是你所提到的真正的問題只有一個。 +1 – epascarello 2014-09-22 13:34:54

0

頁面滯後,因爲每次timout開始,將再次調用超時。你必須設置超時這樣的功能之外:

setInterval(sumfunc,1000); 
function sumfunc(){ 
    document.body.innerHTML = dosumthin(document.body.innerHTML,false); 
} 
+0

但是如果我在外面添加它只會運行一次函數 – GGG 2014-09-22 13:27:00

+0

哦,對不起,那麼你必須使用'setInterval' – 2014-09-22 13:36:55

1

只需使用setInterval代替:

function sumfunc(){ 
document.body.innerHTML = dosumthin(document.body.innerHTML,false); 
} 
window.setInterval(sumfunc,1000); 
0

您需要的間隔,而不是超時。

function sumfunc(){ 
    document.body.innerHTML = dosumthin(document.body.innerHTML,false); 
} 

setInterval(sumfunc, 1000); 
相關問題