0

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

4

1 回答 1

0

对于那些感兴趣的人,来自 Angular 团队的 Kristiyan Kostadinov 发布了我在以下位置打开的票的解决方案:https ://github.com/angular/angular/issues/36794

他说。

我认为问题在于您应该提供 Sanitizer,而不是 DomSanitizer。这是一个工作示例: https ://stackblitz.com/edit/angular-domsanitizer-ivy-facotn

并将代码更改为此似乎有效:

@NgModule({
    // ...
    providers: [
        {
            provide: Sanitizer,
            useClass: NgDompurifyDomSanitizer,
        },
    ],
    // ...
})
于 2020-08-17T14:47:18.210 回答