2011-10-14 28 views
4

有人可以確認firefox(3.6)會自動運行名爲'onload'的javascript函數而不明確被調用嗎? Chrome和IE不會自動運行聲明的函數,除非被調用,但Firefox顯然會運行聲明的函數'onload',即使它沒有被調用(全部在小寫字母中)。firefox自動觸發JavaScript函數名爲'onload'

這裏是jsfiddle link來測試。

在body標籤中,如果您將名爲'test'的函數分配給onload事件,那麼firefox將調用測試函數。如果你刪除onload調用,firefox會自動調用'onload'函數。

這是一個已知的財產的Firefox?

回答

3

Firefox 3.6實際上確實這樣做。那麼4-8。 Firefox 9修復了這個bug,因此function onload() {}不再將該函數添加爲加載事件偵聽器。有關更改的詳細信息,請參閱https://bugzilla.mozilla.org/show_bug.cgi?id=659350

+0

感謝鮑里斯,我很驚訝托馬斯聲稱他無法複製使用FF的行爲。 – Jamex

3

這是因爲如果你聲明一個全局的function onload(),那實際上是window.onload。 這個例子說明吧:

<script> 
var a = 1; 
alert(window.a); // alerts "1" 
</script> 

這應該是跨瀏覽器有效的(我測試了它只能在FF3.6和IE7,8雖然)。

+1

那麼不會在每個瀏覽器中觸發,而不僅僅是Firefox? – Clive

+0

我的原始問題與Clive相同,我只是更新了鏈接,如果您使用IE或Chrome,並且您刪除了body標記中的onload函數調用,那麼IE和chrome不會觸發。 – Jamex

+1

你的解釋是正確的,但'window'對象的全局函數和方法並不總是相同的。很好的例子是'window.name'屬性:'window.name =「foo」'會導致與'target = foo'的鏈接將在該窗口中打開,但是當使用'name =「foo」'或'var name = 「foo」,每個瀏覽器的結果都不一樣。 'onload' /'window.onload'問題與它非常相似。 – duri