离开我的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
是必需的。投票结束这个问题,因为它是重复的(见答案标记正确)。
答案 0 :(得分:5)
这意味着代码将以XML / XHTML和HTML工作,而不必弄乱CDATA
答案 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验证。有趣的是,它也打破了此评论框上的预览:)