来自Flattr Javascript API description :
<script type="text/javascript">
<!--//--><![CDATA[//><!--
(function() {
var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
s.type = 'text/javascript';
s.async = true;
s.src = 'http://api.flattr.com/js/0.5.0/load.js';
t.parentNode.insertBefore(s, t);
})();
//--><!]]>
</script>
我对 <!--//--><![CDATA[//><!--
有点好奇和//--><!]]>
。我想这是一些欺骗那些不理解 <script>
的旧浏览器的技巧。 -标签。但这不是 <!--
足够的? CDATA
到底是什么?的东西?如果我不关心旧浏览器,那么所有这些都已经过时了,对吗? (顺便说一句,是否有人知道任何浏览器,如果我不把这些东西放在那里,他们会感到困惑?)
然后我想知道函数的定义。为什么它在那里?为什么不直接调用代码呢?是为了不向全局 namespace 发送垃圾邮件吗?如果是这样,是否有更简单、更简单的方法来做到这一点,例如只需将代码放入 {}
?
最佳答案
这是黑客的组合,其中:
- 应对 HTML 引入 script 元素之前的浏览器(十多年前)
- 处理 XHTML 中包含 &、< 和 > 的 JavaScript
- 当 XHTML 被视为 HTML 而不是 XHTML(即几乎总是)时,对 XHTML 解决方案进行补偿
- 阻止其他黑客相互干扰
坦率地说,您可以(并且应该)忘记不理解的浏览器 <script>
(注意,这与不支持 JS 不同,这意味着根本无法识别该元素,因此将其(有效地)视为 <span>
)。如果您这样做并使用 XHTML,那么您可以只使用带有 JS 注释前缀的 CDATA 标志 ( //
)。
您通常还应该避免使用 XHTML。除非您正在处理一个坚持生成 XHTML 的服务器端系统,并且将其转换为 HTML 比处理编写 HTML 兼容的 XHTML 的所有问题要花费更多的精力,否则 XHTML 几乎永远不值得付出代价。
如果您不使用 XHTML 或不关心甚至不支持 HTTP 1.1 的浏览器,那么您只需要脚本标记和脚本,根本不需要任何包装器。
在这个特定的示例中,您无论如何都不需要 CDATA 标志 - 脚本不包含任何在 XML 中具有特殊含义的字符,因此您不需要将这些字符视为文本而不是标记的指令.
关于javascript - 一些常见的 JavaScript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484674/