我正在开发一个新站点,并且在编写一些客户端HTML / Javascript代码时遇到了这种情况。
如果
警报必须弹出>
,因为我相信HTML解析器首先在
。这次我看到的是弹出窗口,显示的是>
而不是>
。尽管我可以理解这是由于
标记引起的,但是我不确定其根本原因是什么,除了
以外的其他标记是否会更改默认行为。
如果有人可以指向官方文档,那将非常有帮助。
这是我为此场景创建的一个简单的JSFiddle- https://jsfiddle.net/emz8Lfxt/。
答案 0 :(得分:1)
浏览器专门解析<script>
,它们不会替换其中的HTML实体。这使您可以编写如下内容:
if (a < b)
不必写:
if (a < b)
在早期的浏览器中,您必须编写以下内容:
<script type="text/javascript">
<![CDATA[
…
]]>
</script>
CDATA
部分没有执行实体订阅,因此您可以在其中“正常”编写代码。
但是后来HTML规范将<script>
正文设为默认设置,因此不再需要。
但是,当<script>
位于<svg>
内部时,显然SVG解析器优先。因此>
被翻译为>
。
答案 1 :(得分:1)
说实话,我觉得您很难找到发生这种情况的官方文档。
在这种情况下,我的最佳猜测是,由于SVG元素是SVG图形的容器,并且SVG容器基于XML,并且其中可以包含其他HTML元素;例如:
<svg>
<rect style="fill:rgb(0,0,255);" />
</svg>
浏览器尝试解析内部html,以绘制对象。但是,一旦它意识到自己并不是真正的SVG元素,它就会停止并继续执行您在那里的JavaScript。因此,>
会在执行javascript之前被解析。
我觉得我们需要一个对SVG元素的处理方式有深入了解的人。
我将注意此示例以供参考:
<script>alert(">")</script>
<svg><script>alert(">")</script></svg>
<span><script>alert(">")</script></span>
按顺序输出:
>
>
>
答案 2 :(得分:0)
解析器将HTML文档中的嵌入式SVG视为foreign element。然后,它的内容由SVG解析器解析,因此该SVGElement的所有内容都被解析为SVG。
SVG具有