You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular插值中脚本疑问:为何未被清理且未执行?

Angular插值与HTML绑定的疑问解答

问题1:为何插值语法的值未被Angular清理?

首先得明确Angular里插值语法和[innerHtml]绑定的本质区别:

  • 插值{{ this.test }}属于文本绑定,它的核心逻辑是把变量值作为纯文本插入DOM,只会做HTML转义(把特殊字符转成实体,比如<转成&lt;),不会对内容做“清理”(比如移除script标签这类操作)。你定义的test变量本身就是已经转义后的字符串&lt;script&gt;alert()&lt;/script&gt;,插值时Angular直接把它当成文本输出,浏览器最终把实体解析成<script>alert()</script>的纯文本显示,自然不会触发清理行为。
  • 而[innerHtml]是HTML内容绑定,Angular会把它当成要插入的HTML结构处理,所以会启动安全清理机制,自动移除script、style这类具有潜在风险的标签,避免XSS攻击。

问题2:为何脚本没有运行?

原因很简单:插值插入的内容是DOM文本节点,不是HTML元素节点。浏览器只会解析执行作为DOM元素存在的<script>标签,对于文本节点里的<script>字符串,只会当成普通文本渲染,根本不会去解析执行其中的脚本逻辑。哪怕你手动把文本转成HTML元素,Angular的安全机制也会在[innerHtml]绑定阶段就把script标签干掉,更别说插值这种纯文本场景了。

内容的提问来源于stack exchange,提问作者Carl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:15:05