为什么 Google 会取消转义他们的 Google Analytics(分析)跟踪代码?

Why does Google unescape their Analytics tracking code?

提问人:Jeff 提问时间:11/20/2009 最后编辑:Jeff 更新时间:6/23/2011 访问量:1102

问:

刚从我的 JavaScript 训练轮上下来。

为什么 Google 选择以下第 1 部分中的行?unescapedocument.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

JavaScript 谷歌分析

评论

0赞 Levi Morrison 12/10/2011
可能的重复 在 document.write 上使用 unescape 加载 javascript 有什么好处?

答:

5赞 stpe 11/20/2009 #1

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

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

评论

0赞 Crescent Fresh 11/20/2009
在前面回答的问题中找到了不错的发现。尽管它仍然可以同时使用 XHTML 和 HTML,“而不必弄乱 CDATA”,也不需要:stackoverflow.com/questions/728697/......unescape
0赞 John Feminella 11/20/2009 #2

在不使用“<”或“>”字符的情况下直接写入文档意味着您不必以从字面上解释这些字符的文档格式中转义它们。否则,正确的解释是标记从字符串内部开始,这不是想要的。<script>

另外,请注意,建议的替代代码中存在错误(属性末尾缺少引号)。src

2赞 YOU 11/20/2009 #3

我的理解是,当即使在引号中发现>解析器也错误地理解了这一点,它到达了脚本的末尾,所以他们不能像</script"</script>""</script>"

谷歌希望确保在加载之前设置了这样的变量,所以不转义,只是他们的方式。pageTrackergoogle-analytics.com/*.js%3Cscript%3E%3C/script%3E

只是我的 2 美分,对不起,如果我说错了。

0赞 Rob Kent 11/20/2009 #4

我认为:

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

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