document.write() 為什么會清空頁面


很久以前遇到的問題,放着放着就忘記去研究了
最近看到一篇文章總結一下
作者:abloume
url:   http://blog.csdn.net/u013451157/article/details/78699253

先來一段代碼實例:(代碼1)

1 <body>
2 <div>hello world</div>
3 
4 <script>
5     document.write(111);
6     document.write(222);
7 </script>
8 </body>

再來一段代碼做比較(代碼2)

 1 <body>
 2 <div>hello world</div>
 3 
 4 <script>
 5     window.onload = function(){
 6         document.write(111);
 7         document.write(222);
 8     }
 9 </script>
10 </body>

 

很明顯看到問題,在window.onload后,為什么2次執行document.write()是成功的(並不會覆蓋),但就覆蓋(或清空)了前面的文檔

其實在執行window.onload之前.瀏覽器了創建文檔流 ---> 然后這時候再執行window.onload函數,
而執行document.write()函數會自動調用document.open()函數,創建一個新的文檔流,寫入新的內容,就會覆蓋原來的內容
,
借用作者的原話:window.onload事件是在文檔內容完全加載完畢再去執行事件處理函數,當然文檔流已經關閉了,這個時候執行doucment.writ()函數會自動調用document.open()函數創建一個新的文檔流,並寫入新的內容,再通過瀏覽器展現,這樣就會覆蓋原來的內容

再看看一段代碼實例(代碼3)

 

 1 <body>
 2 <div>hello world</div>
 3 
 4 <script>
 5     window.onload = function(){
 6         document.write(111);
 7         document.close();
 8         document.write(222);
 9     }
10 </script>
11 </body>

 

 這里就非常明顯了,如果document.close()函數執行關閉,document.write()函數是執行了一次document.open()
所以只輸出222

 驗證瀏覽器創建文檔流能否關閉

 就把第一段代碼加上document.close()函數

 

1 <body>
2 <div>hello world</div>
3 
4 <script>
5     document.close();
6     document.write(111);
7     document.write(222);
8 </script>
9 </body>

 

輸出的依然是

借用作者的原話:很遺憾,文檔流是由瀏覽器創建,無權限手動關閉,document.close()函數只能夠關閉由document.open()函數創建的文檔流

最后一個問題,window.onload執行為什么就能關閉
這是因為文檔document對象改變為window對象在新作用域下

在代碼3也可以看出來

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM