2015-09-23 5 views
3

Я использую Cordova 5.3.1, и я, кажется, полностью не могу выполнить любые сетевые запросы без ошибок. Если добавитьКордова AJAX запрос не работает

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

в index.js он терпит неудачу и предупреждает Error: SecurityError: DOM Exception 18 в прошивке и 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., поэтому выглядеть CORS блокируется.

В настоящее время whitelist plugin не устанавливается должным образом, когда вы установите его в соответствии с настоящим SO post и этим JIRA issue, в основном это требует платформ IOS >=4.0.0-dev. Я все еще могу заставить его установить более старую версию с:

cordova plugin add [email protected] 

согласно предложениям в SO поста и JIRA вопрос.

Однако я все еще не могу выполнить любые HTTP-запросы для внешних доменов. Я по-прежнему получаю ту же ошибку «DOM Exception 18». Мой config.xml файл в настоящее время

<?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="[email protected]" 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> 

тэг позволяет различное происхождение, кажется, изменились за разные версии в последнее время, и в результате я перепробовал все возможные комбинации различных различных тегов в этом файле.

Я также проверил $.support.cors, чтобы убедиться, что jQuery разрешает CORS и он делает (jQuery работает должным образом, поскольку запросы AJAX работают с обратным вызовом fail, а не с ошибкой).

У меня также есть мета-тег

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

в index.html. Я подозреваю, что это не проблема с моим эмулятором, блокирующим HTTP-запросы, поскольку это проблема как в эмуляторах Android, так и в iOS и на устройстве Android.

Есть ли у кого-нибудь идеи, почему я все еще имеет проблемы с CORS? Благодарю.

+0

Я только что обновил приложение для кордоны с 3.3.? к 5.3.1. На запросах iOS работают нормально, однако теперь им требуются конечные точки HTTPS с действующими сертификатами на ios9. Но я также не получаю от Android. – steve

ответ

2

Для iOS, если вы создаете для iOS9 и хотите ударить необеспеченных конечных точек, вам придется отредактировать свой файл plist. This gist имеет инструкции.

У меня лично все еще возникают проблемы с Cordova 5.3.1 и андерграундными запросами Android в разных доменах. Этот материал отлично работал на старой версии Кордовы.

[EDIT] Android требуется плагин whitelist для того, чтобы ajax запросил работу. Janky IMO, но счастлив, что ajax снова работает на Android.

+2

Спасибо! Я уже два дня стучал головой о стену, и вы просто решили это! Я согласен, этот выпуск Cordova действительно вызвал некоторые проблемы; он предназначен для устранения необходимости копания в файлах plist и т. д. –

5

Вы пробовали настроив Content-Security-Policy выглядеть следующим образом:

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

Обратите внимание на * по умолчанию в-Src и использования; - В приведенном выше примере также включены некоторые другие инструкции, позволяющие работать с общими библиотеками JS ... это то, что я использую в приложениях JQuery/Handlebars Cordova 5, которые я создаю для Android и iOS.

+0

Спасибо!Это решило мою проблему с'Error: SecurityError: DOM Exception 18 'на iOS. – jamietelin

Смежные вопросы