4

我最近继承了一些网络代码,发现所有的 Java Script 脚本都包含在 HTML 注释标签中

例如:

<script type="text/javascript" language="javascript"><!--
    function ValidateForm() { ... }//-->

据我了解,此方法可防止旧的、不受支持的浏览器解释您的 Java 脚本。然而,这不是我被教导要做的事情,我想知道现在这是否被认为是不必要的,或者这仍然是一种常见的做法?如果是这样,为什么?


更新:感谢 kennebec 提出的将它们留在里面的建议,我现在已经这样做了,也感谢 Emmett:我一定会把它们排除在我以后编写的任何代码之外!

4

4 回答 4

11

http://javascript.crockford.com/script.html

不要将<!-- //-->hack 与脚本一起使用。它旨在防止脚本在第一代浏览器 Netscape 1 和 Mosaic 上显示为文本。多年来一直没有必要。<!-- //-->应该表示 HTML 注释。注释应该被忽略,而不是编译和执行。此外,HTML 注释不包括 --,因此递减的脚本会出现 HTML 错误。

于 2011-01-10T16:30:30.490 回答
2

这是因为 XHTML 验证器。js 代码周围的 HTML 注释应该使用外部标记。验证器应该查看您的 html,而不是您的 js。

我强烈推荐这篇文章 https://developer.mozilla.org/en/properly_using_css_and_javascript_in_xhtml_documents 关于这个主题的一切。

于 2011-01-10T16:34:28.520 回答
0

我的网站是 XHTML 1.1,即 XML。

如果代码中有 XML 实体(例如 '&'、'<' 或 '>'),我的 JavaScript 被包裹在 //<![CDATA[ and中。//]]>

于 2011-01-10T16:36:13.300 回答
0

当. <!--_ </script_<!-- ... -->

例如,

<script><!--
function containsScriptEndTag(s) {
  return s.indexOf('</script>') >= 0;
}
//-->
</script>

没有<!-- ... -->.

所以继续删除它们,但首先检查。

顺便说一句,在script元素内部,它们不被称为“评论”,它们被称为“转义文本跨度”。来自http://www.w3.org/TR/2009/WD-html5-20090423/syntax.html#syntax-escape

转义文本跨度是一个文本跨度,它以本身不在转义文本跨度中的转义文本跨度开头开始,并在下一个转义文本跨度结束处结束。在转义文本范围内不能有任何字符引用——看起来像字符引用的字符序列没有特殊含义。

转义文本跨度开始是由四个字符序列组成的文本部分“

转义文本 span end 是文本的一部分,由三个字符序列“-->”(U+002D HYPHEN-MINUS、U+002D HYPHEN-MINUS、U+003E GREATER-THAN SIGN)组成,其 U+003E GREATER -THAN 符号 (>)。

转义文本跨度开始可以与其对应的转义文本跨度结束共享其 U+002D HYPHEN-MINUS 字符。

于 2011-01-10T16:42:38.797 回答