Depuis la mise à niveau vers la dernière version candidate d'Angular 2, mes img
balises:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
lancent une erreur de navigateur:
EXCEPTION ORIGINALE: Erreur: valeur non sécurisée utilisée dans un contexte d'URL de ressource
La valeur de l'url est:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
ÉDITER:
J'ai essayé la suggestion faite dans l'autre solution selon laquelle cette question est censée être un double, mais j'obtiens la même erreur.
J'ai ajouté le code suivant au contrôleur:
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);
}
Je reçois toujours le même message d'erreur.
EDIT2:
J'ai également changé le html en:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Je reçois toujours le même message d'erreur
[src]='theMediaItem.photoURL1'
Réponses:
J'utilise rc.4 et cette méthode fonctionne pour ES2015 (ES6):
Dans le HTML:
L'utilisation d'une fonction garantit que la valeur ne change pas après l'avoir nettoyée. Sachez également que la fonction de nettoyage que vous utilisez dépend du contexte.
Pour les images,
bypassSecurityTrustUrl
cela fonctionnera mais pour d'autres utilisations, vous devez vous référer à la documentation :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
la source
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
par exemple, mais les balises github feront référence à des versions candidates, comme2.0.0-rc3
. Et je peux voir dans rc3 , par exemple la classe était toujours nomméeDomSanitizationService
.this.sanitizer.bypassSecurityTrustResourceUrl(url)
pour les vidéosTuyau
Modèle
C'est tout!
Remarque: vous ne devriez pas en avoir besoin mais voici l'utilisation du composant du tuyaula source
Le moyen le plus élégant de résoudre ce problème: utilisez pipe. Voici un exemple (mon blog). Vous pouvez donc simplement utiliser
url | safe
pipe pour contourner la sécurité.Reportez-vous à la documentation sur npm pour plus de détails: https://www.npmjs.com/package/safe-pipe
la source
Utilisez Safe Pipe pour le réparer.
Créez un tuyau sûr si vous n'en avez pas.
ng gc pipe safe
ajouter Safe pipe dans app.module.ts
déclarations: [SafePipe]
déclarer un tuyau sûr dans votre ts
Importez Dom Sanitizer et Safe Pipe pour accéder à l'URL en toute sécurité
- Ajouter un coffre-fort avec l'url src
la source
Soit vous pouvez exposer sanitizer à la vue, soit exposer une méthode qui transfère l'appel à bypassSecurityTrustUrl
la source
Angular traite toutes les valeurs comme non approuvées par défaut. Lorsqu'une valeur est insérée dans le DOM à partir d'un modèle, via une propriété, un attribut, un style, une liaison de classe ou une interpolation, Angular nettoie et échappe les valeurs non approuvées.
Donc, si vous manipulez directement DOM et insérez du contenu, vous devez le nettoyer, sinon Angular le fera par des erreurs.
J'ai créé le tuyau SanitizeUrlPipe pour cela
et voici comment vous pouvez utiliser
Si vous souhaitez ajouter du HTML, SanitizeHtmlPipe peut vous aider
En savoir plus sur la sécurité angulaire ici .
la source
la source
la source
Il est possible de définir l'image comme image d'arrière-plan pour éviter les
unsafe url
erreurs:CSS:
la source