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}`);
}
この問題は解決しません。 DomSanitizerクラスはRC6にはもう存在しません
数時間の調査の結果、最新バージョンのng2には、DIを使用して注入できるDomSanitizer
はありませんが、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が取得前にサニタイズされていたため、動作させることができなかったという問題がありました。
文字列が信頼されていることを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">
OverrideSecurityTrust ...関数を機能させようとして失敗した後、私は次のことに頼りました。
@ViewChild('div_element_id') private div_element_id: ElementRef;
...
this.div_element_id.nativeElement.innerHTML = bypass_security_for_this_html;