为什么谷歌要取消转义其分析跟踪代码?

7

我刚刚从我的JavaScript初学者阶段脱身。

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

他们为什么不直接这样写呢?也许在一些老版本的浏览器兼容性方面需要使用unescape

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

作为参考,整个Google Analytics跟踪代码如下:

第一部分:

<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>

第二部分:

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

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

编辑

底线是,unescape是必需的。投票关闭此问题,因为它是一个重复的问题(请参阅标记为正确的答案)。


4个回答

5

之前回答的问题很不错。虽然它仍然可以在XHTML和HTML中工作,而且不需要“搞乱CDATA”,也不需要使用unescape:http://stackoverflow.com/questions/728697/javascript-external-script-loading-strangeness/729072#729072 - Crescent Fresh

2
我的理解是,即使在引号内部出现 </script> ,解析器也会错误地认为它已经到达了脚本的末尾,因此他们不能像这样做 "</script>"
而 Google 希望确保像 pageTracker 这样的变量在 google-analytics.com/*.js 加载之前设置,所以对 %3Cscript%3E%3C/script%3E 进行反转义是他们唯一的方法。
这只是我的个人意见,如果我说错了,请多多包涵。

0

我认为:

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

会在HTML验证中失败。有趣的是,它也会破坏此评论框中的预览 :)


0
直接在文档中编写而不使用“<”或“>”字符意味着您不必在解释这些字符的文档格式中对它们进行转义。否则,正确的解释是<script>标签在字符串内部开始,这不是所需的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接