Cordova/ Ionic: $ http-запрос не обрабатывается при эмуляции или запуске на устройстве
на прошлой неделе все шло хорошо, и пока я запускал приложение на устройстве или эмулировал с Genymotion, все вызовы api работали (либо возвращая данные, либо терпя неудачу, но, по крайней мере, показывая что-то).
Я был с помощью
ionic run android
я добавляю, чтобы обновить глобальный cordova ionic:
npm install -g cordova ionic
так как все запросы $ http даже не обрабатываются. Я не могу получить никаких ответов, пока Api все еще работает нормально, а CORS идеально установлены.
единственный способ, который я нашел, - использовать опцию --livereload или-l:
ionic run -l android
Я хочу избежать использования livereload любой ценой.
Я начал создавать проект с нуля, используя ionic 1.0.0 и cordova lib 4.3.0.
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http) {
alert('calling api');
// Create an anonymous access_token
$http
.get(domain+'/oauth/v2/token?client_id='+public_id+'&client_secret='+secret+'&grant_type=client_credentials')
.then(function(response){
alert(response.data.access_token);
});
})
поэтому при использовании :
ionic serve
он правильно предупреждает "вызов api", а затем ответ (маркер доступа OAuth для этого примера).
но при использовании :
ionic run android
это только предупреждение "вызова api", но, похоже, не обрабатывает http-запрос.
кто-нибудь испытал что-то подобное? Я получаю большую головную боль на что.
2 ответов
С обновлением Cordova 4.0.0 вы столкнетесь с проблемой невозможности совершать HTTP-вызовы RESTful API и загружать внешние ресурсы, которые включают в себя другие HTMLs/видео/аудио/изображения.
белый список доменов с помощью cordova-плагин-белый список решает эту проблему.
удалить плагин whitelist, если он уже установлен:
cordova plugin remove cordova-plugin-whitelist
добавить плагин белого списка через CLI:
cordova plugin add cordova-plugin-whitelist
и затем добавьте следующую строку кода для вашего приложения конфигурации.в XML, который находится в корневом каталоге вашего приложения:
рекомендуемый в документации:
<allow-navigation href="http://example.com/*" />
или:
<allow-navigation href="http://*/*" />
и
этой meta
тег в index.html
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
причина этого вопроса:
из Cordova 4.0.0 для обновления Android:
функциональность белого списка обновлена
вам нужно будет добавить новый Cordova-plugin-whitelist плагин, чтобы продолжить использовать белый список
настройка Content-Security-Policy (CSP) теперь поддерживается и является рекомендуемым способом белого списка (см. подробности в плагине readme)
сетевые запросы блокируются по умолчанию без плагина, поэтому установите этот плагин, чтобы разрешить все запросы, и даже если вы с помощью CSP.
этот новый белый список улучшен, чтобы быть более безопасным и настраиваемым, но устаревшее поведение белого списка по-прежнему доступно через отдельный плагин (не рекомендуется).
Примечание: хотя и не строго часть этого выпуска, последнее приложение по умолчанию созданный cordova-cli будет включать этот плагин по умолчанию.
Он работал для меня, когда я попробовал следующее...
В Config.xml, разрешить доступ и навигации к доменам:
<access origin="http://yourdomain1.com" />
<allow-navigation href="http://yourdomain1.com"/>
затем в индексе.html, добавьте политику Content-Security, как показано ниже:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' http://yourdomain1.com data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline';">