在 Ivy 中使用自定义 DomSanitizer
Using custom DomSanitizer with Ivy
我在 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
angular 团队的 Kristiyan Kostadinov 对那些感兴趣的人发布了我在以下位置打开的工单的解决方案:https://github.com/angular/angular/issues/36794
他说。
I think the problem is that you should be providing Sanitizer, not
DomSanitizer. Here's a working example:
https://stackblitz.com/edit/angular-domsanitizer-ivy-facotn
将代码改成这样似乎有效:
@NgModule({
// ...
providers: [
{
provide: Sanitizer,
useClass: NgDompurifyDomSanitizer,
},
],
// ...
})
我在 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
angular 团队的 Kristiyan Kostadinov 对那些感兴趣的人发布了我在以下位置打开的工单的解决方案:https://github.com/angular/angular/issues/36794
他说。
I think the problem is that you should be providing Sanitizer, not DomSanitizer. Here's a working example: https://stackblitz.com/edit/angular-domsanitizer-ivy-facotn
将代码改成这样似乎有效:
@NgModule({
// ...
providers: [
{
provide: Sanitizer,
useClass: NgDompurifyDomSanitizer,
},
],
// ...
})