2010-07-27 87 views
3

可能重複:
Why split the <script> tag when writing it with document.write()?爲什麼此腳本元素分解爲多個document.write()調用?

我經常看到下面的語句:

document.write("<scr"); 
document.write("ipt language=\"Javascript\" type=\"text/javascript\" src=\"source url\"></scr"); 
document.write("ipt>"); 

這樣做有什麼好處?爲什麼人們不寫下整個劇本?

document.write("<script "); 
+0

會質疑jQuery的標題和標籤。相應修改 – 2010-07-27 09:55:30

+0

@James Wiseman:我不讀jQuery,只是查詢。 – Gumbo 2010-07-27 09:56:53

+0

是的,它是查詢 – Reigel 2010-07-27 09:58:31

回答

3

這可以幫助你:

http://www.webmasterworld.com/forum91/2913.htm

根據不同的瀏覽器,其他之前的JavaScript, 以及如何量以及形成的整體代碼 是,這樣做是以防止解析器 將標籤和 標籤解釋爲可執行代碼 而不是將被寫入的字符串。

我發現它只是保存頭痛的道路,如果你這樣做 當使用腳本寫腳本 標籤。

+1

而不是跨多個* document.write()*調用,通常只是「結束」結束標記就足夠了,例如'

0

難道這是不是有人試圖越過防病毒腳本掃描儀?

回答你的問題:
這樣做沒有收穫。事實上,它實際上比較慢,因爲你調用了更多的函數,創建了更多的字符串對象,並附加了更多的字符串。

對於舊的瀏覽器,我想這可能是類似的<!-- <script> blargh </script> //-->

0

使用我相信這是某種原始代碼混淆的腳本潛入動態頁面。例如,如果一個網站過濾字符串「<script」的用戶輸入,這裏的這段代碼仍然會通過。

很可能這是一些企圖在某處注入惡意代碼的嘗試。

1

這取決於。當你看到這樣的代碼,這意味着他們正在動態生成的某些部分否則是的,他們可以很容易地寫在<script>標籤下面。

有時,這樣的代碼用於惡意目的。

2

這可能是爲了符合標準而做的 - 但在這種情況下他們做錯了。

description of CDATA data type

雖然STYLESCRIPT元素使用CDATA他們的數據模型,這些元素,CDATA必須以不同的用戶代理處理。標記和實體必須被視爲原始文本並按原樣傳遞給應用程序。 字符序列「</」(結束標記打開定界符)的第一個出現被視爲終止元素內容的結尾。在有效的文檔中,這將是元素的結束標記。

所以他們更應該有分裂的結束標記分隔開</這樣的:

document.write("<script language=\"Javascript\" type=\"text/javascript\" src=\"source url\"><" + "/script>"); 
+0

+1 - '<\/script>'也可以,所以你不必使用字符串連接。 – 2010-07-27 10:08:27

+1

@安迪E:我知道。我只是使用了連接以及它在問題的示例中使用。 – Gumbo 2010-07-27 10:14:38

相關問題