2010-07-24 103 views
2

由於某些原因,如註釋中所述,以下代碼在IE 8中無法正常工作。我試圖給文檔對象添加一個「writeSpecial」方法,並且這種方法在第一次被調用時工作得很好,但是當這被稱爲隨後的時間時,它就變成了未定義的。在IE8中向文檔對象添加自定義方法爲'未定義'

但是,這隻發生在IE中,當我使用onload事件。內聯主體onload和window.attachEvent('onload',main);之間似乎沒有區別。如果我直接從腳本塊調用main(),它可以正常工作。再次,這只是在IE中。

會有人碰巧知道這是爲什麼嗎?

謝謝!

<html> 
    <head> 
    <title>Test</title> 
    <script type="text/javascript"> 

     document.writeSpecial = function(str) 
     {  
     this.write(str + " [specialfied]"); 
     }   

     function main() 
     {   
     alert(document.writeSpecial); 
     document.writeSpecial('test 1'); 
     alert(document.writeSpecial); //document.writeSpecial is undefined here in IE, works in firefox...why? 
     document.writeSpecial('test 2');   
     }  
    </script> 
    </head> 
    <body onload="main()"> 
    </body> 
</html> 

回答

2

我做了一些測試,並儘可能靠近我可以在IE的身影document.write重置document對象。所以這裏是一個可以工作的修改版本。如果你沒有使用寫功能,我不認爲你會有任何麻煩。也許別人可以詳細說明爲什麼IE會這樣做。

window.onload=function(){ 
function foo(str){ 
    document.write(str + " [specialfied]"); 
    document.writeSpecial=foo; 
} 
document.writeSpecial=foo; 
main(); 
function main(){ 
    document.writeSpecial('test 1'); 
    document.writeSpecial('test 2');   
}}; 
+1

一個可能的解決方法(雖然我不知道它是否會工作):不要使用document.write。改用'[body] .innerHTML + ='。 – MatrixFrog 2010-07-24 04:15:11

+0

它會工作,但我不確定writeSpecial()應該做什麼,所以我不確定哪個更好的解決方案。 – qw3n 2010-07-24 05:41:22

+0

感謝您的迴應:)。 這只是一個簡單的例子,從上下文中取出來說明我所觀察到的。出於所有的實際目的,我可以通過幾種不同的方式解決這個問題。我主要對這種行爲的解釋感興趣。 – Lonimor 2010-07-24 06:30:21