2012-06-25 42 views
1

fireing只有一次可能重複:
setInterval not working (firing only once) in Google Chrome extension的Javascript SetInverval()在Firefox

使用document.write()的時,該錯誤僅是一個問題。

我在Mac 10.6.8英特爾。

這裏是我的腳本:

setInterval(function(){myFun()},1000); 

function myFun() { 
    document.write('something'); 
} 

的行爲在不同的瀏覽器不同: 火狐12:只發生一次。瀏覽器在狀態欄中顯示「連接」。谷歌瀏覽器和Safari瀏覽器:似乎能正常工作。

注意:在使用的setTimeout反而使一切行爲像火狐(不工作)。 使用setInterval(myFun),1000),這應該是這麼多錯誤的來源,行爲相同。

+0

這似乎是'document.write'的一個問題,看看http://jsfiddle.net/46eqC/ – Mageek

+1

在頁面加載後調用'document.write()'會覆蓋文檔,並且包含任何JavaScript資產。 – Pointy

+0

@Pointy:這將解釋錯誤。只有Firefox覈實資產? –

回答

0

試試這個:

setInterval(function(){myFun()},1000); 

function myFun() { 
    // Return all elements in document of type 'body' 
    // (there will only be one) 
    var bodyArray = document.getElementsByTagName('body'); 
    // get the body element out of the array 
    var body = bodyArray[0]; 
    // save the old html of the body element 
    var oldhtml=body.innerHTML; 
    // add something to the end 
    body.innerHTML=oldhtml+"somrthing"; 
} 

正如其他人所說,使用document.write()將(在某些瀏覽器)核彈用於更新文件腳本,寫體(而不是頭部,其中的JavaScript應被存儲)將會阻止它發作。

+0

正確,我的回答基本上是一樣的。 –

+1

是的,我相信innerHTML總是更好。 – NSF

+0

並且不會對腳本造成傷害的瀏覽器不符合規範。特別是,文檔完成解析後的document.write應該清除所有掛起的定時器(包括此處涉及的定時器),但是在某些基於WebKit的瀏覽器中不這樣做。 –

0

看來你錯過了分號myFun後()

setInterval(function(){myFun();},1000); 

function myFun() { 
    document.write('something'); 
} 

另外,還要確保你把功能<body></body>

+0

這裏的分號在語法上不重要。 – apsillers

+0

許多人認爲,當很多推薦使用的愚蠢的document.write()是真正的問題時,setInterval()語法會導致問題。 –

+0

嗯,我從來沒有使用過document.write()。你說的話可能是他問題的關鍵。好決定。 – NSF

0

document.open()結果在清理文件。這個功能在document.write()之前被Firefox調用。這樣你的間隔就會丟失。

看到W3C Document Object Model HTML

1

許多開始教程使用document.write()的爲 「hellow世界」。然而,這個功能是危險的,因爲它可能會混淆腳本(通過加劇整個程序)。這是一種安全的方式做調試打印輸出:

前的腳本,在之間,並在HTML,補充一點:

<div id="myDebug"></div> 

腳本,先將其轉換爲一個變量能夠被要求:

var myDebug = document.getElementById("myDebug"); 

當你需要展示一些東西,這樣做:

debug.innerHTML = "some string"; 

這將在瀏覽器窗口中顯示字符串。