web-dev-qa-db-de.com

Angular 2, DomSanitizer, BypassSecurityTrustHtml, SVG

Ich habe DomSanitizer mit einer SVG-Datei in einer HTML-Zeichenfolge verwendet.

Vor der aktuellen Version von Angular funktionierte dies einwandfrei:

this.domSanitizer.bypassSecurityTrustHtml(content);

Jetzt bekomme ich ein Objekt zurückgerufen

SafeHtmlImpl {changingThisBreaksApplicationSecurity: "<svg> blah </svg>"}
changingThisBreaksApplicationSecurity

Gibt es jetzt eine neue Möglichkeit, auf die Ausgabe von DomSanitizer zuzugreifen? Soll ich es als SafeHTML-Typ erhalten oder so? Was ist der Sinn von bypassSecurityTrustHtml, wenn es immer noch HTML filtert?

Irgendwelche Antworten auf einer Postkarte? Bitte...

19
Tom

DEMO: https://plnkr.co/edit/Qke2jktna55h40ubUl8o?p=preview 

import { DomSanitizer } from '@angular/platform-browser'

@Pipe({ name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform  {
  constructor(private sanitized: DomSanitizer) {}
  transform(value) {
    console.log(this.sanitized.bypassSecurityTrustHtml(value))
    return this.sanitized.bypassSecurityTrustHtml(value);
  }
}

@Component({
  selector: 'my-app',
  template: `
    <div [innerHtml]="html | safeHtml">
    </div>
  `,
})
export class App {
  name:string;
  html: safeHtml;
  constructor() {
    this.name = 'Angular2'
    this.html = "<svg> blah </svg>";
  }
}
33
micronyks

Verwenden Sie DomSanitizer.bypassSecurityTrustHtml:

constructor(private sanitizer: DomSanitizer) {
}

let html = this.sanitizer.bypassSecurityTrustHtml("<svg> blah </svg>");

Weitere Informationen: https://angular.io/docs/ts/latest/guide/security.html#bypass-security-apis

2