【发布时间】:2019-09-12 03:39:15
【问题描述】:
我正在开发一个新网站,在编写一些客户端 HTML/Javascript 代码时,我遇到了这种情况。
如果<script> 标记中有 HTML 编码字符,例如 <script> alert("&gt;");</script>,则必须弹出带有 &gt; 的警报,因为我相信 HTML 解析器在 @987654326 的 javascript 解析器之前首先运行@ 和 <style> 标签。这按预期工作。
现在,在编写一些代码时,我这样做了 - <svg><script>alert("&gt;");</script></svg>。这次我得到一个带有&gt; 而不是&gt; 的弹出窗口。虽然我可以理解是因为<svg> 标签,但我不确定根本原因是什么以及除了<svg> 之外的其他标签会改变默认行为。
如果有人可以指出官方文档,那将非常有帮助。
这是我为这个场景创建的一个简单的 JSFiddle - https://jsfiddle.net/emz8Lfxt/。
【问题讨论】:
-
您的 HTML 无效。您的 SVG 标记未关闭,现在浏览器会混淆 SVG 是在脚本标记周围(顺便说一句,这没有任何意义)还是在它之前。关闭您的 SVG 标签,看看是否有不同的工作方式。您可以使用此站点验证您的 HTML 是否有效。 validator.w3.org/#validate_by_input
-
关闭 svg 标签对用户演示的内容没有影响。自己试试。我会注意到我赞成他的问题来反驳你的反对票;不管一些无关紧要的复制粘贴,这个问题都很有趣。
-
@Crayons - 谢谢!在 标签之后关闭 svg 标签没有影响。
-
在脚本标签之前或之后关闭标签确实会有所不同。
-
<svg></svg><script></script>和<svg><script></script></svg>确实有所作为。
标签: javascript html xml svg