Solicitud de Cordova AJAX no funciona

Estoy usando Cordova 5.3.1, y parece que no puedo hacer ninguna request de networking sin errores. Si agrego

$.ajax( "http://foo.bar.com/getfeed" ) .done(function() { alert( "success" ); }) .fail(function(jqXHR, textStatus, errorThrown) { alert( errorThrown ); }) .always(function() { alert( "complete" ); }); 

a index.js falla y alerta Error: SecurityError: DOM Exception 18 en iOS y SecurityError: Failed to execute 'open on 'XMLHttpRequest': Refused to connect to 'http://foo.bar.com/getfeed' because it violates the document's Content Security Policy. , por lo que parece que CORS está siendo bloqueado.

Actualmente, el complemento de list blanca no se instala correctamente cuando lo instala de acuerdo con esta publicación SO y este problema de JIRA , básicamente requiere la plataforma iOS >=4.0.0-dev . Todavía puedo obligarlo a instalar una versión anterior con:

 cordova plugin add cordova-plugin-whitelist@1.0.0 

según las sugerencias en la publicación SO y en la edición JIRA.

Sin embargo, todavía no puedo hacer ninguna request http a dominios externos. Todavía recibo el mismo error de 'DOM Excepción 18'. Mi file config.xml está actualmente

 <?xml version='1.0' encoding='utf-8'?> <widget id="com.company.pearstest" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>CORS test</name> <description> A sample Apache Cordova application that responds to the deviceready event. </description> <author email="dev@cordova.apache.org" href="http://cordova.io"> Apache Cordova Team </author> <content src="index.html" /> <plugin name="cordova-plugin-whitelist" version="1" /> <access origin="*" /> <allow-intent href="http://*/*" /> <allow-intent href="https://*/*" /> <allow-intent href="tel:*" /> <allow-intent href="sms:*" /> <allow-intent href="mailto:*" /> <allow-intent href="geo:*" /> <platform name="android"> <allow-intent href="market:*" /> </platform> <platform name="ios"> <allow-intent href="itms:*" /> <allow-intent href="itms-apps:*" /> </platform> </widget> 

La label para permitir diferentes orígenes parece haber cambiado últimamente en diferentes versiones y, como resultado, he probado todas las combinaciones imaginables de varias tags diferentes en este file.

También he comprobado $.support.cors para asegurarse de que jQuery permite CORS y lo hace (jQuery está funcionando correctamente, ya que las requestes AJAX están ejecutando la callback de falla en lugar de fallar silenciosamente).

También tengo la metalabel

 <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:"> 

en index.html Sospecho que esto no es un problema con mi emulador bloqueando las requestes http, ya que es un problema en los emuladores de Android y iOS y en un dispositivo Android.

¿Alguien tiene alguna idea de por qué sigo teniendo problemas de CORS? Gracias.

Para iOS, si está desarrollando para iOS9 y desea poder acceder a puntos finales no garantizados, tendrá que editar su file Plist. Esta esencia tiene instrucciones.

Personalmente, aún tengo problemas con Cordova 5.3.1 y las requestes de ajax de dominio cruzado de Android. Todo esto funcionó bien en la versión anterior de Cordova.

[EDIT] Android requirió el complemento de la list blanca para que las requestes ajax funcionen. Janky IMO, pero feliz de tener ajax trabajando nuevamente en Android.

¿Ha intentado configurar su Content-Security-Policy para que se vea así:

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

Tenga en count el * en default-src y el uso de; – También he incluido algunas otras instrucciones en el ejemplo anterior para permitir que funcionen las bibliotecas comunes de JS … esto es lo que uso en las aplicaciones JQuery / Handlebars Cordova 5 que estoy desarrollando para Android e iOS.