Angular 2禁用清理

时间:2016-09-16 05:52:10

标签: angular typescript sanitization angular2-template

我正在尝试将base64字符串渲染为<img src='data:image/png;base64,${Here}'

但总是当我尝试渲染它时,ng2在渲染之前清理我的base64字符串,然后在DOM中显示它之前将一些内容添加到我的值中。 我找到了解决方法(使用DomSanitizer),但它不适用于最新版本。

这是我的标记:

<img alt="RegularImage" src="data:image/png;base64,{{imgBase64}}">

这是我的组成部分:

imgBase64="SomeBase64StringFetchedSomehow";

但angular2显示在控制台的下一条消息中 - WARNING: sanitizing unsafe URL value

如何防止NG2清理我的base64字符串?

更新

get getImg() {
    return this._sanitizer.sanitize(SecurityContext.URL,`data:image/png;base64,${this.img}`);
}

无法解决此问题。在RC6中不再存在DomSanitizer类

3 个答案:

答案 0 :(得分:8)

您需要明确告诉Angular2该字符串是可信的

https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html

constructor(private sanitizer:DomSanitizer) {}

get imgBase64() {
  this.sanitizer.bypassSecurityTrustUrl('data:image/png;base64,$SomeBase64StringFetchedSomehow');
}
<img alt="RegularImage" [src]="imgBase64">

另见In RC.1 some styles can't be added using binding syntax

答案 1 :(得分:3)

经过几个小时的研究后,我终于发现在最新版本的ng2中,没有DomSanitizer可以使用DI注入,但是Sanitizer。所以这是用法:

constructor( private _sanitizer: Sanitizer){
}

get getImg() {
    return this._sanitizer.sanitize(SecurityContext.URL, `data:image/png;base64,${this.img}`);
}

<input src="{{getImg}}"/>

正如您所看到的,sanitize方法的第一个参数是SecurityContext实例,它基本上是枚举。所以现在Sanitizer是一个工厂,它根据SecurityContext

选择要使用的实现

在我的情况下,我有一个问题,我的base64在那之前被消毒了,这就是为什么我无法让它工作。

答案 2 :(得分:0)

尝试使bypassSecurityTrust ...函数失效后,我采取了以下措施:

@ViewChild('div_element_id') private div_element_id: ElementRef;
...

this.div_element_id.nativeElement.innerHTML = bypass_security_for_this_html;