【发布时间】:2013-01-12 12:36:50
【问题描述】:
我刚刚遇到了一个关于 HTML 解析的病态案例。我一直认为<script> 标签会一直运行到第一个关闭</script> 标签。但事实证明,并非总是如此。
这是有效的:
<script><!--
alert('<script></script>');
--></script>
即使这是有效的:
<script><!--
alert('<script></script>');
</script>
但这不是:
<script><!--
alert('</script>');
--></script>
这也不是:
<script>
alert('<script></script>');
</script>
这种行为在 Firefox 和 Chrome 中是一致的。因此,令人难以置信的是,浏览器似乎接受脚本标签内的 html 注释内的打开+关闭脚本标签。那么问题来了,浏览器really是如何解析脚本标签的呢? 这很重要,因为我使用的 HTML 解析库 Nokogiri 假定了明显的(但不正确的)直到第一个关闭标记规则并且没有处理这种边缘情况。我想大多数其他库也不会处理它。
【问题讨论】:
-
将您的脚本放在一个单独的文件中。
-
问题与html解析有关,也就是说我在处理别人的网页。
-
HTML 解析的边缘案例......我现在要哭着睡觉了,祝你好运:D
-
@Daniel 是的,我的意思是通过将实际的 JavaScript 代码放在一个引用的 JS 文件中,将其从 HTML 解析中取出。
-
这是对浏览器应该使用的状态机的详细描述:whatwg.org/specs/web-apps/current-work/multipage/…。 TBH,我不确定它是否支持您所看到的。
标签: javascript html html-parsing