Actualización v8
¡Las respuestas a continuación funcionan pero exponen su aplicación a riesgos de seguridad XSS! . En lugar de usar this.sanitizer.bypassSecurityTrustResourceUrl(url)
, se recomienda usarthis.sanitizer.sanitize(SecurityContext.URL, url)
Actualizar
Para la versión RC.6 ^ use DomSanitizer
Saqueador
Y una buena opción es usar tubería pura para eso:
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer} from '@angular/platform-browser';
@Pipe({ name: 'safe' })
export class SafePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform(url) {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
recuerde agregar su nuevo SafePipe
a la declarations
matriz de AppModule. ( como se ve en la documentación )
@NgModule({
declarations : [
...
SafePipe
],
})
html
<iframe width="100%" height="300" [src]="url | safe"></iframe>
Saqueador
Si usa la embed
etiqueta, esto podría ser interesante para usted:
Versión anterior RC.5
Puede aprovechar DomSanitizationService
así:
export class YourComponent {
url: SafeResourceUrl;
constructor(sanitizer: DomSanitizationService) {
this.url = sanitizer.bypassSecurityTrustResourceUrl('your url');
}
}
Y luego únete a url
tu plantilla:
<iframe width="100%" height="300" [src]="url"></iframe>
No olvide agregar las siguientes importaciones:
import { SafeResourceUrl, DomSanitizationService } from '@angular/platform-browser';
Muestra de saqueador
Pipe({ name: 'safe' }) export class SafePipe implements PipeTransform { constructor(private sanitizer: DomSanitizer) {} transform(url): any { return this.sanitizer.bypassSecurityTrustResourceUrl(url); } }
y en plantilla llamo<iframe width="100%" height="315" src="{{url}} | safe" frameborder="0" allowfullscreen></iframe>
. Pero no funciona con el error 'valor inseguro'. Por favor ayuda[src]="url | safe"
Solo quite los corchetesthis.sanitizer.sanitize(SecurityContext.URL, url)
me sale un error "Error de ERROR: valor inseguro utilizado en un contexto de URL de recurso" II lo cambio para quethis.sanitizer.bypassSecurityTrustResourceUrl(url)
funcione bien. ¿Alguna idea de lo que puede estar mal?this.sanitizer.sanitize(SecurityContext.URL, url)
no funciona ythis.sanitizer.bypassSecurityTrustResourceUrl(url)
funciona, pero plantea un problema de vulnerabilidad de alta seguridad en el análisis de código estático, lo que me impide pasar esto a producción. Necesito una manera de arreglar estoEsta funciona para mí.
fuente
Esto me funciona a Angular 5.2.0
sarasa.Component.ts
sarasa.Component.html
¡¡¡eso es todo amigos!!!
fuente
Había estado luchando por 4 horas. El problema estaba en la etiqueta img. Cuando usa corchetes para 'src', por ejemplo: [src]. no puede usar esta expresión angular {{}}. solo das directamente de un ejemplo de objeto a continuación. si le das una expresión angular {{}}. Obtendrá un error de interpolación.
primero usé ngFor para iterar los países
segundo pones esto en la etiqueta img. eso es todo.
fuente
También me encontré con este problema, pero para usar una tubería segura en mi módulo angular, instalé el paquete npm safe-pipe, que puedes encontrar aquí . Para su información, esto funcionó en Angular 9.1.3, no lo he probado en ninguna otra versión de Angular. Así es como lo agrega paso a paso:
Instale el paquete a través de npm install safe-pipe o hilo agregue safe-pipe. Esto almacenará una referencia a él en sus dependencias en el archivo package.json, que ya debería tener al comenzar un nuevo proyecto angular.
Agregue el módulo SafePipeModule a NgModule.imports en su archivo de módulo angular de la siguiente manera:
Agregue la tubería segura a un elemento en la plantilla para el componente angular que está importando a su NgModule de esta manera:
fuente
fuente
Enhorabuena! ¨ ^^ Tengo una solución fácil y eficiente para ti, ¡sí!
Excelente ;)
fuente
unsafe value used in a resource URL context
<video> <source [src]=video.url type="video/mp4" /> Browser not supported </video>
, de hecho, puede usarla para mostrar documentos también ... si tiene algún problema al usar la etiqueta de video, estoy aquí;)