2009-11-20 81 views
7

剛剛離開我的JavaScript培訓車輪。爲什麼Google會忽略他們的Google Analytics跟蹤代碼?

爲什麼Google選擇unescapedocument.write第1部分下面?

爲什麼他們不只是把它寫這樣的嗎?也許unescape是一些較舊的瀏覽器兼容性所必需的?

document.write('<script src="' 
    + gaJsHost 
    + 'google-analytics.com/ga.js" type="text/javascript"></script>'); 

僅供參考,整個谷歌Analytics跟蹤代碼如下所示:

第1部分:

<script type="text/javascript"> 
var gaJsHost = (("https:" == document.location.protocol) 
    ? "https://ssl." 
    : "http://www." 
); 
document.write(unescape("%3Cscript src='" 
    + gaJsHost 
    + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E" 
)); 
</script> 

2部分:

<script type="text/javascript"> 
try 
{ 
    var pageTracker = _gat._getTracker("UA-0000000-0"); 
    pageTracker._trackPageview(); 
} 
catch(err){} 
</script> 

我明白w ^代碼的其餘部分,只是對unescape部分感到好奇。

編輯

底線是,unescape是必需的。投票結束這個問題,因爲它是重複的(見答案標記正確)。

+0

可能重複[在document.write上使用unescape加載JavaScript的優點是什麼?](http://stackoverflow.com/questions/1224670/what -is-the-advantage-of-unescape-on-document-write-to-load-javascript) – 2011-12-09 19:43:44

回答

5

這意味着代碼將在XML/XHTML和HTML工作,而無需惹CDATA

請參閱: https://stackoverflow.com/questions/1224670/what-is-the-advantage-of-using-unescape-on-document-write-to-load-javascript

+0

很好的發現了以前回答的問題。雖然它仍然可以與XHTML和HTML一起工作,「不用惹CDATA」,也不需要'unescape':http://stackoverflow.com/questions/728697/javascript-external-script-loading-strangeness/ 729072#729072 – 2009-11-20 12:33:58

0

直接寫入到文件,而無需使用 '<'或'>'字符意味着你不必以字面解釋這些文件格式來轉義它們。否則,正確的解釋是<script>標籤開始於字符串內部,這不是我們所期望的。

另外,還要注意有對你提出的替代代碼中的錯誤(你錯過了src屬性結束後一個引號)。

+0

修復了引號。 – Jeff 2009-11-20 13:02:59

2

我的理解是,當</script>發現即使引號"</script>" 解析器錯誤地理解,在腳本的其覆蓋面結束,所以他們不能做到像"</script>"

而谷歌希望確保變量像pageTracker內在google-analytics.com/*.js負載之前設置,所以進行反向轉義%3Cscript%3E%3C/script%3E只對它們的方式。

只是我的2美分,對不起,如果我說的不對。

0

我認爲:

document.wrIte('<script src="'" 

將失敗HTML驗證爲好。有趣的是,它也打破了這個評論框中的預覽:)

相關問題