2015-02-17 11 views
11

Ho una piccola app AngularJS in cui sto tentando di aprire un'immagine caricata e sto correndo nel problema dove l'angolare aggiunge "non sicuro:" all'inizio dell'URL . Ho aggiunto la seguente riga nel mio app config per disinfettare l'URL, ma non funziona per me:Aggiunta angolare "non sicura" all'url quando si tenta di scaricare un file

$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|blob:chrome-extension):|data:image|\//); 

Sto usando v1.3.0 angolare così sto usando il nome della proprietà corretto. Uso principalmente Chrome, ma ho lo stesso problema in altri browser. Inoltre, l'inizio della mia immagine assomiglia a questo:

unsafe:data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg... 

Qualche idea di cosa mi manca nella regex? Grazie in anticipo!

+0

Si potrebbe voler rimuovere l'ultimo '|, altrimenti verrà abbinato qualsiasi elemento che abbia una barra in avanti. – ndn

+0

Se si potesse semplicemente semplificare la dichiarazione del problema, qualcuno sarebbe in grado di aiutarti. Stai usando espressioni regolari per qualcosa. Puoi solo fare cose come trovare/sostituire, ecc. Qualsiasi motore capisce la semplice espressione che usi. – sln

+0

@sln: sta passando la regex a questo metodo angolare: [https://docs.angularjs.org/api/ng/provider/$compileProvider](https://docs.angularjs.org/api/ng/ fornitore/$ compileProvider) –

risposta

0

Se si $compileProvider.imgSrcSanitizationWhitelist() senza il parametro regexp restituisce l'espressione regolare attualmente definita.

L'esecuzione di questo codice su un 1.3.0 angolare vuoto:

app.config(function ($compileProvider) { 
    console.log($compileProvider.imgSrcSanitizationWhitelist()); // 
}); 

ho ottenuto questo risultato - /^\s*((https?|ftp|file|blob):|data:image\/)/

E i Base64 JPEG utilizzando la base <img ng-src="{{main.src}}"> funziona in realtà come si può vedere here, e another one con una png. Guarda anche la console per vedere le espressioni regolari.

Un altro test che ho eseguito è quello di spostare il data:image/jpeg;base64, fuori della stringa ambito binded e metterlo il ng-src:

<img ng-src="data:image/jpeg;base64,{{main.src}}">

Come si può vedere worked pure.

Per farla breve - non è necessario definire un'espressione regolare in 1.3.0 e sopra per i dati: image/*, come definito per impostazione predefinita.

Non posso essere sicuro di quale sia il problema, ma forse hai un'altra definizione di imgSrcSanitizationWhitelist da qualche parte nel tuo codice o l'uri dei dati è rotto in qualche modo.

Problemi correlati