201207242052document.write

document.write 的重點在執行時 document 是否已載入完全。如是,會先呼叫 document.open 再執行 document.write 。而已載入完全的 document 執行 document.open 會將現有內容全部清空。所謂的 document 載入完全正是 DOMContentLoaded 觸發之時。這也是為什麼內有 document.write 的 JavaScript 不能在 DOMContentLoaded 後動態載入。

document.write 會將內容塞在目前所執行 <script> 之後。另有一函式 document.writeln ,與 document.write 差異僅在會在塞入內容後方加上 \n ,注意是 \n 而非 <br> 。 \n 在 HTML 中功效等同一空白字元。

另如是載入外部 JavaScript 則無妨,但如果是將 JavaScript 寫在 HTML 中,而 document.write 或 document.writeln 塞入內容中有 </script> 要特別處理,因為瀏覽器優先將 </script> 視為 <script> 的結束,將 JavaScript 處理中斷。請將 </script> 字串隔開:

<script>
  document.write('<script> alert(1); </sc' + 'ript>');
</script>

或加上 HTML 註解:

<script>
<!--
  document.write('<script> alert(1); </script>');
-->
</script>

避免此狀況。

如果在意 HTML 4.01 或 XHTML Validation ,那要修改成:

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

Validation 才會通過,因為 HTML 4.01 和 XHTML </ 就視為標籤結尾。 HTML5 無此問題。

延伸 用 JavaScript 把 script tag 塞進 iframe 加快網頁載入速度
回應
Google 站內搜尋
BloggerAds
累積 | 今日
loading......
    沒有新回應!





Powered by Xuite