让旧版浏览器忽略HTML页面中的JavaScript块的一个古老习语是将<script>
元素的内容包装在HTML注释中:
<script>
<!--
alert("Your browser supports JavaScript");
//-->
</script>
基本原理是旧的无JavaScript浏览器将文本呈现为<script>
元素的内容,因此将JavaScript放入HTML注释会使浏览器无需呈现。
另一方面,现代浏览器将看到<script>
元素并将其内容解析为JavaScript。因此,评论需要是有效的JavaScript。 JavaScript解析器会忽略结束HTML注释(-->
),因为它前面有一个JavaScript行注释(//
)。
我的问题是,打开 HTML评论(<!--
)如何导致JavaScript解析器失败?我从各种各样的人那里听说开场HTML评论是有效的JavaScript。如果开场评论被评估为JavaScript,那么它在执行时会做什么?
答案 0 :(得分:7)
它似乎是令人兴奋的,一个可能具有特殊含义的表达式(<
,!
和--
都是Javascript中的运算符),但没有操作数,它不会感。
Turns out <!--
简单地等同于Javascript中的//
,它用于注释掉一行。
这是一种语言功能,但似乎没有详细记录,并且可能因为支持这种“黑客”的简单原因而被添加。现在我们不得不忍受它不会破坏向后兼容性。
毋庸置疑,虽然这很有趣但是这种评论不应该用在其他人可能会阅读和使用的实际代码中。
“hack”也已过时,因为现在每个浏览器都会理解<script>
标记并且不显示其内容(即使Javascript已关闭)。就个人而言,在大多数情况下,我尝试避免将Javascript直接写入HTML,并始终将我的Javascript作为外部资源加载以分离HTML和Javascript。
答案 1 :(得分:3)
在另一个StackOverflow问题中,@ MathiasBynens给出了我认为的 答案:
Why is the HTML comment open block valid JavaScript?
简而言之,显然,这是基于浏览器的JS引擎的非标准添加,允许这些<!--
和-->
作为单行注释标记,如标准中的//
JS。