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