将自定义DomSanitizer与Ivy结合使用

时间:2020-04-10 21:42:10

标签: angular9 angular-ivy angular-dom-sanitizer dompurify

我在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

1 个答案:

答案 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,
        },
    ],
    // ...
})