我在 Angular 9 应用程序中使用 ng-dompurify,并且我用 NgDompurifyDomSanitizer 实现替换了默认的 Angular DomSanitizer。
@NgModule({
// ...
providers: [
{
provide: DomSanitizer,
useClass: NgDompurifyDomSanitizer,
},
],
// ...
})
这样在做类似的事情时
<div [innerHTML]="someHtmlString"></div>
DomPurify 将用于清理该 HTML 字符串。
这在我不使用 Ivy 时效果很好,但是当我使用 Ivy 时,渲染的 HTML 会使用 NgDompurifyDomSanitizer 以外的东西进行清理。我不确定在这种情况下使用的是什么消毒剂,但我看到样式属性已从 html 元素中剥离,如果使用 NgDompurifyDomSanitizer 则不会发生这种情况。
我在这里整理了一个 stackblitz 示例来显示该问题:https ://stackblitz.com/edit/angular-domsanitizer-ivy 。如果您进入 stackblitz 设置并取消选中“启用常春藤”复选框,您可以看到文本呈现为红色,但是当它被选中时,内联样式被剥离并且文本为黑色。
我不确定我是否需要做一些特别的事情才能使这项工作与 Ivy 一起工作,或者 Ivy 是否不支持它。我整天都在用谷歌搜索试图弄清楚,但我没有任何运气。
我会很感激有人可能有任何见解。
编辑:对于那些感兴趣的人,这似乎是一个错误,我已经打开了一张票:https ://github.com/angular/angular/issues/36794