javascript - HTML Opening-Comment 是有效的 JavaScript 吗?

标签 javascript html cross-browser

让非常老的浏览器忽略 HTML 页面中的 JavaScript block 的一个古老习惯是将 <script> 的内容包裹起来。 HTML 注释中的元素:

<script>
    <!--
        alert("Your browser supports JavaScript");
    //-->
</script>

基本原理是旧的无 JavaScript 浏览器会将 <script> 的内容呈现为文本元素,因此将 JavaScript 放在 HTML 注释中会使浏览器无法呈现任何内容。

另一方面,现代浏览器会看到 <script>元素并将其内容解析为 JavaScript。因此,注释必须是有效的 JavaScript。结束 HTML 注释 ( --> ) 被 JavaScript 解析器忽略,因为它前面有 JavaScript 行注释 ( // )。

我的问题是,opening HTML 注释 ( <!-- ) 如何不导致 JavaScript 解析器失败?我从不同的人那里听说,开头的 HTML 注释是有效的 JavaScript。如果开场评论确实被评估为 JavaScript,那么它在执行时会做什么?

最佳答案

这似乎是一件令人兴奋的事情,一个可能具有特殊含义的表达式( <!-- 都是 Javascript 中的运算符),但是没有操作数就没有意义。

Turns out<!--等同于//在 Javascript 中,它用于注释掉一行。

虽然它是一种语言功能,但似乎没有很好的文档记录,并且可能出于支持此“hack”的简单原因而被添加。现在我们必须忍受它,以免破坏向后兼容性。

不用说,虽然知道这是一件有趣的事情,但这种类型的注释不应该用在其他人可能碰巧阅读和使用的真实代码中。

“hack”也已过时,因为现在每个浏览器都能理解 <script>标记并且不显示其内容(即使 Javascript 已关闭)。就个人而言,在大多数情况下,我尽量避免将 Javascript 直接写入 HTML,并且始终将我的 Javascript 作为外部资源加载以分离 HTML 和 Javascript。

关于javascript - HTML Opening-Comment 是有效的 JavaScript 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098730/

相关文章:

javascript - 在 IE 中的不同窗口上执行 try/catch

html - 填充底部在 Firefox 和 IE11 中不起作用

javascript - HOC 没有设置正确的值

javascript - 在 jQuery 中实现安全取消引用?

html - 图像未显示在输入字段内

javascript - 实现 CSS sidenav 不起作用

html - 不同于 1 或 0 的 CSS 不透明度在 IE11 中不起作用

css 问题 w/ie 8 及以下

javascript - react : Can only update a mounted or mounting component

javascript - 循环遍历 JQuery 对象