在 JavaScript 中使用 HTML 注释(不好的做法)
HTML 注释(可选地前面有空格)将导致浏览器忽略代码(在同一行),尽管这被认为是不好的做法。
HTML 注释打开序列(<!--
)的单行注释:
注意: JavaScript 解释器在此处忽略 HTML 注释(
-->
)的结束字符。
<!-- A single-line comment.
<!-- --> Identical to using `//` since
<!-- --> the closing `-->` is ignored.
可以在遗留代码中观察到此技术,以隐藏不支持它的浏览器中的 JavaScript:
<script type="text/javascript" language="JavaScript">
<!--
/* Arbitrary JavaScript code.
Old browsers would treat
it as HTML code. */
// -->
</script>
HTML 结束注释也可以在行的开头使用 JavaScript(独立于开始注释)(可选地前面有空格),在这种情况下,它也会导致行的其余部分被忽略:
--> Unreachable JS code
这些事实也被利用来允许页面首先将自己称为 HTML,然后再称为 JavaScript。例如:
<!--
self.postMessage('reached JS "file"');
/*
-->
<!DOCTYPE html>
<script>
var w1 = new Worker('#1');
w1.onmessage = function (e) {
console.log(e.data); // 'reached JS "file"
};
</script>
<!--
*/
-->
运行 HTML 时,忽略 <!--
和 -->
注释之间的所有多行文本,因此当以 HTML 格式运行时,其中包含的 JavaScript 将被忽略。
然而,作为 JavaScript,虽然忽略以 <!--
和 -->
开头的行,但它们的效果不会超过多行,所以跟随它们的行(例如,self.postMessage(...
)在作为 JavaScript 运行时不会被忽略,至少在它们到达之前一个 JavaScript 评论,标记为/*
和*/
。在上面的示例中使用了这样的 JavaScript 注释来忽略剩余的 HTML 文本(直到 -->
也被忽略为 JavaScript)。