为什么Google会覆盖他们的Google Analytics跟踪代码?

时间:2009-11-20 12:19:36

标签: javascript google-analytics

离开我的JavaScript训练轮。

为什么Google会在下面的第1部分中选择unescape document.write行?

他们为什么不这样写呢?某些较旧的浏览器兼容性可能需要unescape吗?

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

供参考,整个Google 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>

我理解代码的其余部分,只是对unescape部分感到好奇。

修改

底线是,unescape是必需的。投票结束这个问题,因为它是重复的(见答案标记正确)。

4 个答案:

答案 0 :(得分:5)

  

这意味着代码将以XML / XHTML和HTML工作,而不必弄乱CDATA

请参阅: https://stackoverflow.com/questions/1224670/what-is-the-advantage-of-using-unescape-on-document-write-to-load-javascript

答案 1 :(得分:2)

我的理解是</script&gt;即使在引号"</script>"内也能找到 解析器错误地理解了它到达脚本的末尾,所以它们不能像"</script>"那样做

Google希望确保在pageTracker加载之前设置google-analytics.com/*.js之类的变量,因此取消%3Cscript%3E%3C/script%3E只是他们的方式。

只是我的2美分,抱歉如果我说错了。

答案 2 :(得分:0)

直接写入文档而不使用'&lt;'或'&gt;'字符意味着您不必以文档格式对它们进行转义,这些格式可以解释这些格式。否则,正确的解释是<script>标签在字符串内部开始,这不是所希望的。

另请注意,您提议的替代代码中存在错误(您在src属性结束后错过了引号。)

答案 3 :(得分:0)

我认为:

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

也会失败HTML验证。有趣的是,它也打破了此评论框上的预览:)