2016-06-28 23 views
12

Per alcune ragioni, alcune delle mie immagini vengono anteposte con 'unsafe:', che impedisce loro di essere renderizzate.Ionic 2 + Angular 2: le immagini precedute da "non sicuro", pertanto non vengono visualizzate anche se vanno bene

Q) Perché sta succedendo questo e come posso risolverlo? È angolare 2 essere dispari con whitelist o Ionic 2?

ad es.

<p><img src="unsafe:data:image/jpeg;base64,/9..... 
<p><img src="data:image/jpeg;base64,/9..... 

Non c'è niente di sbagliato con l'immagine (vedi qui), vedi plunkr here

La seconda immagine è resa dal ionico 2, il primo che ho rimosso manualmente il prefisso per mostrare va bene.

+1

È lo stesso senza Angular2 o ionico se aggiunto direttamente a 'index.html' senza bootstrap Angolare e ionico http://plnkr.co/edit/oZilVHewCeFAaIF6skMT?p=preview –

+0

Ciao, sì lo so, ho spiegato cosa è accadendo nella mia domanda. Il plunkr è semplicemente lì per il contesto. – Dave

+0

Non penso che tu mi capisca chiaramente. Certo, se li rimuovi entrambi, la pagina è la stessa, ma quello che sto dicendo è che quando USING Angular 2 + Ionic 2, sta emettendo l'imageBase64 con quello preposto. Quindi sono coinvolti. – Dave

risposta

29

Per chiunque vivendo questo problema, ho 'risolto' esso utilizzando il seguente:

Classe:

import {DomSanitizationService} from '@angular/platform-browser'; 

constructor(private _DomSanitizationService: DomSanitizationService) {} 

Template:

<img [src]="_DomSanitizationService.bypassSecurityTrustUrl(imgSrcProperty)"/> 

Dove imgSrcProperty è l'immagine offensiva base64 codificata.

Continuo a pensare che sia un bug!

+1

Sei un bell'uomo, tu. Molto bene. – Aarmora

+13

Da allora è stato rinominato in 'DomSanitizer', ho appena riscontrato il problema in Angular 2.1.0. –

+0

È importante notare che questo ignora l'intero Content Security Policy (CSP), che può essere impostato mediante il tag < '. – Dalie

2

Vorrei aggiungere una risposta aggiuntiva, quindi alcuni di voi non dovranno eseguire il debugging per anni.

Abbiamo anche riscontrato questo problema insieme a Ionic + Angular su iOS (WKWebView) e scoperto che gli URL di dati Base64 sono anche considerati "non sicuri" una volta che la stringa Base64 contiene interruzioni di riga. In stile MS Windows CRLF o LF.

Abbiamo proceduto a rimuovere quei caratteri offensivi dalle stringhe base64 (un'interfaccia esterna era "carina" loro), che alla fine ha risolto il problema per noi.

Prima di applicare il bypass indicato da @Dave, vorrei controllare la stringa.

Problemi correlati