Desde a atualização para o último candidato a lançamento do Angular 2, minhas img
tags:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
estão gerando um erro do navegador:
EXCEÇÃO ORIGINAL: Erro: valor inseguro usado em um contexto de URL de recurso
O valor do url é:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
EDITAR:
Tentei a sugestão feita na outra solução de que essa pergunta deveria ser uma duplicata, mas estou recebendo o mesmo erro.
Eu adicionei o seguinte código ao 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);
}
Ainda estou recebendo a mesma mensagem de erro.
EDIT2:
Eu também mudei o html para:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Eu ainda recebo a mesma mensagem de erro
[src]='theMediaItem.photoURL1'
Respostas:
Estou usando rc.4 e este método funciona para ES2015 (ES6):
No HTML:
O uso de uma função garantirá que o valor não mude depois de limpá-lo. Também esteja ciente de que a função de sanitização que você usa depende do contexto.
Para imagens,
bypassSecurityTrustUrl
funcionará, mas para outros usos, você precisa consultar a documentação :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
fonte
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
por exemplo, mas as tags github irão se referir a candidatos a lançamento, como2.0.0-rc3
. E posso ver no rc3 , por exemplo, a classe ainda tinha um nomeDomSanitizationService
.this.sanitizer.bypassSecurityTrustResourceUrl(url)
para vídeosTubo
Modelo
É isso aí!
Nota: Você não deveria precisar, mas aqui está o uso de componente do tubofonte
A maneira mais elegante de consertar isso: use cachimbo. Aqui está um exemplo (meu blog). Assim, você pode simplesmente usar o
url | safe
pipe para contornar a segurança.Consulte a documentação sobre npm para obter detalhes: https://www.npmjs.com/package/safe-pipe
fonte
Use Safe Pipe para consertá-lo.
Crie um tubo seguro se você não tiver nenhum.
ng gc pipe safe
adicione o canal seguro em app.module.ts
declarações: [SafePipe]
declare um tubo seguro em seu ts
Importe Dom Sanitizer e Safe Pipe para acessar a url com segurança
- Adicionar seguro com url src
fonte
Você pode expor o sanitizer para a visualização ou expor um método que encaminha a chamada para bypassSecurityTrustUrl
fonte
Angular trata todos os valores como não confiáveis por padrão. Quando um valor é inserido no DOM a partir de um modelo, por meio de propriedade, atributo, estilo, associação de classe ou interpolação, o Angular limpa e escapa de valores não confiáveis.
Portanto, se você está manipulando o DOM diretamente e inserindo conteúdo nele, é necessário higienizá-lo, caso contrário o Angular o fará por meio de erros.
Eu criei o pipe SanitizeUrlPipe para este
e é assim que você pode usar
Se você deseja adicionar HTML, SanitizeHtmlPipe pode ajudar
Leia mais sobre segurança angular aqui .
fonte
fonte
fonte
É possível definir a imagem como imagem de fundo para evitar
unsafe url
erros:CSS:
fonte