IE 解析document.write

document.write()會把輸出寫入到腳本文檔所在的位置,瀏覽器解析完documemt.write()所在文檔內容後,繼續解析document.write()輸出的內容,然後在繼續解析HTML文檔。

 

<script type="text/javascript

 document.write('<script type="text/javascript" src="test.js"><//script>');

 document.write('<script type="text/javascript">');

 document.write('alert(2);');

 document.write('alert("我是" + tmpStr);');

 document.write('<//script>');

</script>

<script type="text/javascript

  alert(3);

</script>

test.js的內容是:

var tmpStr = 1; alert(tmpStr);

 

  • 在Firefox和Opera中的彈出值的順序是:1、2、我是1、3
  • 在IE中彈出值的順序是:2、1、3,同時瀏覽器報錯:tmpStr未定義

 

原因可能是IE在document.write時,並未等待加載SRC中的Javascript代碼完畢後,才執行下一行,所以導致2先彈出,並且執行到document.write(’document.write("我是" + tmpStr)’)調用tmpStr時,tmpStr並未定義,從而報錯。

解決這個問題,可以利用HTML解析是解析完一個HTML標籤,再執行下一個的原理,把代碼拆分來實現:

<script type="text/javascript>

 document.write('<script type="text/javascript" src="test.js"><//script>');

</script>

 <script type="text/javascript">

 document.write('<script type="text/javascript">');

 document.write('alert(2);');

 document.write('alert("我是" + tmpStr);');

 document.write('<//script>');

</script>

<script type="text/javascript">

 alert(3);

</script>

這樣IE下和其他瀏覽器輸出值的順序都是一直的了:1、2、我是1、3。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章