Запросы Ajax терпят неудачу после обновления до Кордовы 5.0 + [email protected]
Недавно я обновился до Cordova 5.0 (и Cordova Android 4.0), и с тех пор мое приложение больше не может обращаться к внешним ресурсам.
У меня все еще есть <access origin="*" />
в config.xml(как и раньше), и у меня все еще есть <uses-permission android:name="android.permission.INTERNET" />
в AndroidManifest.xml(как и раньше), но ajax-вызовы отклоняются без объяснения (параметр "textStatus" error ", параметр" errorThrown "равен null, а xhr.state() возвращает" reject ").
Я проверял, что ни один запрос не попадает на сервер, поэтому он кажется, что он остановлен Android, но журнал не дает никаких объяснений относительно того, почему...
Я могу получить доступ к указанному URL-адресу в браузере Android, просто не из приложения.
Запрос ajax выполняется по вызову Backbone.sync() Backbone.js, который в итоге вызывает jquery $.ajax(). Я ничего не изменил о том, как делается звонок... просто обновил кордову.
Есть ли новые требования/настройки для сетевых запросов в Cordova 5.0 или что-то еще, что мне нужно сделать иначе, чем предыдущие версии Кордовы?
Кто-нибудь знает, как я могу получить дополнительную информацию о том, почему Android и/или Кордова отклоняют запрос?
Ответы
Ответ 1
Я проследил виновника до платформы [email protected] кордовы. Теперь требуется новый плагин cordova-plugin-whitelist.
Его можно установить с помощью
cordova plugin add cordova-plugin-whitelist
или добавив
<plugin name="cordova-plugin-whitelist" spec="1" />
в config.xml, а затем он настроен с
<allow-navigation href="*" />
вместо старого тега <access origin="*" />
.
Немного раздражает, что журнал больше не выплевывает сообщения об ошибках "whitelist rejection", когда возникает такая проблема (это бы сэкономило мне тонну), но, возможно, это произойдет позже.
Ответ 2
Две вещи
- Убедитесь, что URL-адрес ajax, который вы используете, позволяет запрашивать запросы перекрестного происхождения.
- Вы передаете соответствующие заголовки при запросах на перекрестный поиск.
Для чтения
http://enable-cors.org/
Как включить CORS в AngularJs
http://backbonetutorials.com/cross-domain-sessions/
Ответ 3
В Cordova 6.X вам нужно удалить встроенный "белый список" и переустановить новую версию плагина.
cordova plugin remove cordova-plugin-whitelist
и установите плагин
cordova plugin add cordova-plugin-whitelist
а затем замените <allow-navigation href="*" />
на файл config.xml вместо <access origin="*" />
в моем случае этот трюк работал.
Ответ 4
Если вы используете cordova 6.x.x, вам нужно удалить встроенный кордовый плагин-белый список с помощью
плагин cordova remove cordova-plugin-whitelist
и переустановите его, используя
плагин cordova добавить cordova-plugin-whitelist
даже если проблема сохраняется, перезапустите командную строку и попробуйте.