Seit dem Upgrade auf den neuesten Angular 2-Release-Kandidaten sind meine img
Tags:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
werfen einen Browserfehler:
ORIGINAL AUSNAHME: Fehler: Unsicherer Wert, der in einem Ressourcen-URL-Kontext verwendet wird
Der Wert der URL ist:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
BEARBEITEN:
Ich habe den in der anderen Lösung gemachten Vorschlag ausprobiert, dass diese Frage ein Duplikat sein soll, aber ich erhalte den gleichen Fehler.
Ich habe dem Controller den folgenden Code hinzugefügt:
import {DomSanitizationService} from '@angular/platform-browser';
@Component({
templateUrl: 'build/pages/veeu/veeu.html'
})
export class VeeUPage {
static get parameters() {
return [[NavController], [App], [MenuController], [DomSanitizationService]];
}
constructor(nav, app, menu, sanitizer) {
this.app = app;
this.nav = nav;
this.menu = menu;
this.sanitizer = sanitizer;
this.theMediaItem.photoURL1 = this.sanitizer.bypassSecurityTrustUrl(this.mediaItems[1].url);
}
Ich erhalte immer noch die gleiche Fehlermeldung.
EDIT2:
Ich habe auch das HTML geändert in:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Ich erhalte immer noch die gleiche Fehlermeldung
[src]='theMediaItem.photoURL1'
Antworten:
Ich verwende rc.4 und diese Methode funktioniert für ES2015 (ES6):
Im HTML:
Durch die Verwendung einer Funktion wird sichergestellt, dass sich der Wert nach der Bereinigung nicht ändert. Beachten Sie auch, dass die von Ihnen verwendete Desinfektionsfunktion vom Kontext abhängt.
Funktioniert für Bilder,
bypassSecurityTrustUrl
für andere Zwecke müssen Sie jedoch auf die Dokumentation verweisen :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
quelle
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
zum Beispiel auf Github- Tags , aber Github- Tags beziehen sich auf Release-Kandidaten wie2.0.0-rc3
. Und ich kann in rc3 sehen , dass die Klasse zum Beispiel noch benannt wurdeDomSanitizationService
.this.sanitizer.bypassSecurityTrustResourceUrl(url)
für VideosRohr
Vorlage
Das ist es!
Hinweis: Sie sollten es nicht benötigen, aber hier ist die Komponentenverwendung des Rohrsquelle
Der eleganteste Weg, dies zu beheben: Verwenden Sie ein Rohr. Hier ist ein Beispiel (mein Blog). Sie können dann einfach
url | safe
Pipe verwenden, um die Sicherheit zu umgehen.Weitere Informationen finden Sie in der Dokumentation zu npm: https://www.npmjs.com/package/safe-pipe
quelle
Verwenden Sie Safe Pipe, um das Problem zu beheben.
Erstellen Sie ein sicheres Rohr, wenn Sie keine haben.
ng gc Rohr sicher
Fügen Sie Safe Pipe in app.module.ts hinzu
Erklärungen: [SafePipe]
deklarieren Sie sicheres Rohr in Ihrem ts
Importieren Sie Dom Sanitizer und Safe Pipe, um sicher auf die URL zuzugreifen
- Safe mit src url hinzufügen
quelle
Entweder können Sie das Desinfektionsmittel für die Ansicht verfügbar machen oder eine Methode verfügbar machen, die den Aufruf an bypassSecurityTrustUrl weiterleitet
quelle
Angular behandelt alle Werte standardmäßig als nicht vertrauenswürdig. Wenn ein Wert aus einer Vorlage über eine Eigenschaft, ein Attribut, einen Stil, eine Klassenbindung oder eine Interpolation in das DOM eingefügt wird, bereinigt Angular nicht vertrauenswürdige Werte und entgeht ihnen.
Wenn Sie also DOM direkt bearbeiten und Inhalte einfügen, müssen Sie es bereinigen, da Angular sonst Fehler verursacht.
Ich habe die Pipe SanitizeUrlPipe dafür erstellt
und so können Sie verwenden
Wenn Sie HTML hinzufügen möchten, kann SanitizeHtmlPipe helfen
Lesen Sie mehr über Winkel Sicherheit hier .
quelle
quelle
quelle
Es ist möglich, ein Bild als Hintergrundbild festzulegen, um
unsafe url
Fehler zu vermeiden :CSS:
quelle