我在Angular 9应用程序中使用ng-dompurify,并且已将默认的Angular DomSanitizer替换为NgDompurifyDomSanitizer实施。
@NgModule({
// ...
providers: [
{
provide: DomSanitizer,
useClass: NgDompurifyDomSanitizer,
},
],
// ...
})
以这种方式处理
<div [innerHTML]="someHtmlString"></div>
DomPurify将用于对HTML字符串进行清理。
当我不使用Ivy,但是当我使用Ivy时,此效果很好,但使用NgDompurifyDomSanitizer以外的其他东西对渲染的HTML进行了清理。我不确定在那种情况下使用的是哪种消毒剂,但我发现样式属性已从html元素中剥离,如果使用NgDompurifyDomSanitizer则不会发生。
我整理了一个堆栈闪电示例,在此处显示了此问题:https://stackblitz.com/edit/angular-domsanitizer-ivy。如果你进入stackblitz设置,并取消选中“启用常春藤”复选框,就可以看到文本呈现红色,但是当它被选中的内联样式被剥离和文字为黑色。
我不确定是否需要做一些特殊的事情才能使Ivy正常工作,或者Ivy不支持它。我整天都在Google上搜寻,以求弄清楚,但我没有运气。
我很感谢别人可能提供的任何见识。
编辑:对于那些感兴趣的人来说,这的确似乎是个错误,我已经打开了一张票证:https://github.com/angular/angular/issues/36794
答案 0 :(得分:0)
对于那些感兴趣的角度小组的克里斯蒂安·科斯塔迪诺夫(Kristiyan Kostadinov),我在https://github.com/angular/angular/issues/36794
上发布了我打开的门票的解决方案他说。
我认为问题在于您应该提供消毒剂,而不是 DomSanitizer。这是一个工作示例: https://stackblitz.com/edit/angular-domsanitizer-ivy-facotn
将代码更改为此似乎可行:
@NgModule({
// ...
providers: [
{
provide: Sanitizer,
useClass: NgDompurifyDomSanitizer,
},
],
// ...
})