2016-04-12 32 views
5

In un'app Cordova su cui sto lavorando c'è un iframe. Il problema è che quando si verifica l'app (sia sul simulatore che sul dispositivo) l'iframe è vuoto. Su Android l'iframe funziona perfettamente però.Cordova iOS iframe vuoto

L'iframe viene caricato dinamicamente in una direttiva Angolare.

All'interno della funzione di collegamento direttiva il seguente codice viene utilizzato per caricare e aggiungere l'iframe all'elemento della direttiva:

var iframe = angular.element('<iframe class="widget" width="' + widgetWidth + '" height="' + widgetHeight + '"></iframe>'); 
iframe.attr('src', url); 
element.append(iframe); 

Ho anche provato con qualcosa nelle righe seguenti:

var iframe = document.createElement('iframe'); 
iframe.src = url; 

Ciò risulta in qualcosa del genere (utilizzando Safari web inspector):

<iframe class="widget" width="384" height="505" src="http://hostname/correct/uri"></iframe> 

Nel mio file index.html Ho la seguente serie:

<meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-eval'; connect-src * 'unsafe-eval'; object-src 'self'; style-src * 'unsafe-inline';"> 

devo anche le seguenti righe nel mio Cordova config.xml:

<access origin="*" subdomains="true" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

C'è anche errori o avvisi in Safari Web Ispettore.

Quindi la mia domanda è, c'è qualche trucco per far funzionare iFrame nelle app iOS di Cordova che mi mancano. O cosa c'è di sbagliato nel mio attuale codice di configurazione?

Sto usando angularjs 1.5.3 e ho jquery 2.2.1 (caricato prima di angularjs) nel caso in cui questo aiuti.

+0

Dopo ulteriori test, ho anche notato che l'evento onload dell'iframe non viene mai attivato. Nel caso qualcuno abbia qualche idea su questo. – Jan

risposta

10

Il problema era il tag allow-navigazione. Quindi per risolverlo ho dovuto solo inserire il tag <allow-navigation href="*" /> nel file config.xml del progetto.

Sono arrivato alla soluzione attraverso la casella di output in xcode mentre il simulatore era in esecuzione. C'era un messaggio contenente l'url dell'iframe in questione e qualcosa su "navigazione interna respinta".

+0

Nessuna fortuna, il problema è lo stesso. – JimiOr2

+1

Ho dovuto eseguire il comando 'cordova platform rm ios',' cordova platform add ios' per far funzionare questa modifica. Un 'cordova clean',' cordova build' potrebbe funzionare anche. – camomileCase

+0

Perfetto, molte grazie – Max

1

Hai provato a impostare child-src e/o frame-antenest nel meta tag Content-Security-Policy? Potrebbe essere necessario impostare anche * o qualcosa di più restrittivo come solo gli URL delle sorgenti iframe che si stanno utilizzando.

Ci sono informazioni su questo a content-security-policy.com

esempio, sulla base di criteri di protezione dei contenuti:

<meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-eval'; child-src *; connect-src * 'unsafe-eval'; object-src 'self'; style-src * 'unsafe-inline';"> 
+0

Grazie per il link. Dalle informazioni nel link, sembra che i child-src e gli antenati del frame non siano supportati da Safari. Li ho provati lo stesso, ma senza fortuna. – Jan