2009-11-20 128 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验证为好。有趣的是,它也打破了这个评论框中的预览:)

相关问题