Od czasu aktualizacji do najnowszego kandydata do wydania Angular 2 moje img
tagi:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
zgłaszają błąd przeglądarki:
ORYGINALNY WYJĄTEK: Błąd: niebezpieczna wartość używana w kontekście adresu URL zasobu
Wartość adresu URL to:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
EDYTOWAĆ:
Wypróbowałem sugestię z innego rozwiązania, że to pytanie ma być duplikatem, ale otrzymuję ten sam błąd.
Dodałem do sterownika następujący kod:
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);
}
Nadal otrzymuję ten sam komunikat o błędzie.
EDYCJA2:
Zmieniłem też HTML na:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Nadal otrzymuję ten sam komunikat o błędzie
[src]='theMediaItem.photoURL1'
Odpowiedzi:
Używam rc.4 i ta metoda działa dla ES2015 (ES6):
W HTML:
Użycie funkcji zapewni, że wartość nie zmieni się po jej oczyszczeniu. Należy również pamiętać, że używana funkcja sanityzacji zależy od kontekstu.
W przypadku obrazów
bypassSecurityTrustUrl
będzie działać, ale w przypadku innych zastosowań należy zapoznać się z dokumentacją :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
źródło
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
2.0.0-rc3
DomSanitizationService
this.sanitizer.bypassSecurityTrustResourceUrl(url)
dla filmówRura
Szablon
Otóż to!
Uwaga: Nie powinieneś tego potrzebować, ale tutaj jest użycie komponentu ruryźródło
Najbardziej elegancki sposób rozwiązania tego problemu: użyj rury. Oto przykład (mój blog). Możesz więc po prostu użyć
url | safe
potoku, aby ominąć zabezpieczenia.Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją dotyczącą npm: https://www.npmjs.com/package/safe-pipe
źródło
Użyj Safe Pipe, aby to naprawić.
Utwórz bezpieczną rurę, jeśli jej nie masz.
ng gc pipe bezpieczne
dodaj Safe Pipe w app.module.ts
deklaracje: [SafePipe]
zadeklaruj bezpieczną rurę w swoim ts
Importuj Dom Sanitizer i Safe Pipe, aby bezpiecznie uzyskać dostęp do adresu URL
- Dodaj sejf z adresem URL src
źródło
Albo możesz udostępnić sanitizer do widoku, albo ujawnić metodę, która przekazuje wywołanie do bypassSecurityTrustUrl
źródło
Angular domyślnie traktuje wszystkie wartości jako niezaufane. Kiedy wartość jest wstawiana do DOM z szablonu, poprzez właściwość, atrybut, styl, wiązanie klasy lub interpolację, Angular oczyszcza i usuwa niezaufane wartości.
Więc jeśli bezpośrednio manipulujesz DOM i wstawiasz do niego zawartość, musisz go oczyścić, w przeciwnym razie Angular popełni błędy.
Stworzyłem rurę SanitizeUrlPipe tego
i tak możesz używać
Jeśli chcesz dodać HTML, może pomóc SanitizeHtmlPipe
Przeczytaj więcej o zabezpieczeniach kątowych tutaj .
źródło
źródło
źródło
Możliwe jest ustawienie obrazu jako obrazu tła, aby uniknąć
unsafe url
błędu:CSS:
źródło