Desde que actualicé al último candidato de lanzamiento de Angular 2, mis img
etiquetas:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
están lanzando un error de navegador:
EXCEPCIÓN ORIGINAL: Error: valor no seguro utilizado en un contexto de URL de recurso
El valor de la URL es:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
EDITAR:
Probé la sugerencia hecha en la otra solución de que se supone que esta pregunta es un duplicado, pero obtengo el mismo error.
He agregado el siguiente código al controlador:
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);
}
Sigo recibiendo el mismo mensaje de error.
EDIT2:
También he cambiado el html a:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Sigo teniendo el mismo mensaje de error
[src]='theMediaItem.photoURL1'
Respuestas:
Estoy usando rc.4 y este método funciona para ES2015 (ES6):
En el HTML:
El uso de una función garantizará que el valor no cambie después de desinfectarlo. También tenga en cuenta que la función de desinfección que utiliza depende del contexto.
Para las imágenes,
bypassSecurityTrustUrl
funcionará, pero para otros usos, debe consultar la documentación :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
fuente
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
por ejemplo, pero las etiquetas github se referirán a candidatos de lanzamiento, como2.0.0-rc3
. Y puedo ver en rc3 , por ejemplo, la clase todavía se llamabaDomSanitizationService
.this.sanitizer.bypassSecurityTrustResourceUrl(url)
para videosTubo
Modelo
¡Eso es!
Nota: No debería necesitarlo, pero aquí está el uso de componentes de la tubería.fuente
La forma más elegante de solucionar este problema: use pipe. Aquí hay un ejemplo (mi blog). Entonces puede simplemente usar la
url | safe
tubería para evitar la seguridad.Consulte la documentación de npm para obtener más detalles: https://www.npmjs.com/package/safe-pipe
fuente
Utilice Safe Pipe para arreglarlo.
Crea una tubería segura si no tienes ninguna.
caja fuerte para tuberías ng gc
agregar tubería segura en app.module.ts
declaraciones: [SafePipe]
declarar tubería segura en sus ts
Importe Dom Sanitizer y Safe Pipe para acceder a la URL de forma segura
- Agregar caja fuerte con src url
fuente
O puede exponer el desinfectante a la vista o exponer un método que reenvía la llamada a bypassSecurityTrustUrl
fuente
Angular trata todos los valores como no confiables por defecto. Cuando se inserta un valor en el DOM desde una plantilla, a través de una propiedad, atributo, estilo, enlace de clase o interpolación, Angular desinfecta y escapa los valores que no son de confianza.
Entonces, si está manipulando DOM directamente e insertando contenido, debe desinfectarlo, de lo contrario Angular lo hará a través de errores.
He creado la tubería SanitizeUrlPipe para esto
y así es como puedes usar
Si desea agregar HTML, SanitizeHtmlPipe puede ayudar
Lea más sobre seguridad angular aquí .
fuente
fuente
fuente
Es posible configurar la imagen como imagen de fondo para evitar
unsafe url
errores:CSS:
fuente