Плагин Cordova Whitelist

Я знаю, что этот вопрос задавали много-много раз в Интернете. Мне не повезло пробовать все, что есть.

Я пытаюсь отправить данные POST на сервер и получить простой ответ. Очевидно, мне нужно будет установить плагин белого списка Cordova для доступа к внешним источникам из приложения, поэтому я установил его.

Я получаю сообщение об ошибке: Не удалось загрузить ресурс: net :: ERR_NAME_NOT_RESOLVED.

Информация о проекте:

  • Это приложение пользовательского интерфейса Onsen
  • Кордова CLI 6.5.0
  • Версия Android 6.1.2

Установленные плагины:

Мета-тег:

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

Я использую: Windows 10, Visual Studio 2015.

Что я сделал:

  1. Удален и переустановлен плагин Whitelist с помощью Visual Studio

  2. Плагин был удален и переустановлен через Cordova CLI.

    Плагин Cordova добавить плагин-Cordova в белый список

  3. Плагин удален и переустановлен через Github

  4. Я даже обновил Кордову до 6.5.0 с 6.2.0

  5. Я создал простой запрос GET, чтобы проверить, работает ли он, но по-прежнему ничего не работает.

  6. Очистил кэш Cordova в Visual Studio.

Я использовал код Javascript:

$http({
    method: 'GET', url: "http://mywebsite.com/simple_get.php"
}).then(
   function (response) {
       alert(JSON.stringify(response));
   },
   function (response) {
       alert(JSON.stringify(response));
   }
);

Код jQuery также пробовал:

var settings = {
    "async": true,
    "crossDomain": true,
    "url": "http://mywebsite.com/demo.php",
    "method": "GET",
    "headers": {
        "content-type": "application/x-www-form-urlencoded",
        "cache-control": "no-cache"
    },
    "data": {}
}

jQuery.ajax(settings).done(function (response) {
    console.log(response);
});

Я понятия не имею, как отлаживать больше и решать проблему, любая помощь будет принята с благодарностью ... Это последний шаг для моего приложения :(

Спасибо


person Rizo    schedule 16.04.2017    source источник


Ответы (2)


Это мой config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget id="au.com.myapp" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps">
  <name> MyApp</name>
  <description>fancy user interfaces for hybrid mobile applications. It uses uses Apache Cordova to help you build an app that targets multiple mobile platforms: Android, iOS, Windows, and Windows Phone.</description>
  <author email="[email protected]" href="http://myappdomain.com">Author</author>
  <content src="index.html" />
  <access origin="*" />
  <allow-intent href="*" />
  <allow-intent href="http://*/*" />
  <allow-intent href="https://*/*" />
  <allow-intent href="tel:*" />
  <allow-intent href="sms:*" />
  <allow-intent href="mailto:*" />
  <allow-intent href="geo:*" />
  <allow-navigation href="*" />
  <allow-intent href="itms:*" />
  <allow-intent href="itms-apps:*" />
  <vs:features />
  <preference name="windows-target-version" value="8.1" />
  <preference name="windows-phone-target-version" value="8.1" />
  <preference name="DisallowOverscroll" value="true" />
  <preference name="Orientation" value="portrait" />
  <preference name="loglevel" value="DEBUG" />
  <preference name="AndroidLaunchMode" value="singleTop" />
  <preference name="ErrorUrl" value="" />
  <preference name="Fullscreen" value="True" />
  <preference name="KeepRunning" value="true" />
  <preference name="SplashScreen" value="screen" />
  <preference name="AutoHideSplashScreen" value="false" />
  <preference name="SplashScreenDelay" value="20000" />
  <preference name="FadeSplashScreen" value="false" />
  <preference name="FadeSplashScreenDuration" value=".25" />
  <preference name="ShowSplashScreenSpinner" value="false" />
  <preference name="AllowInlineMediaPlayback" value="false" />
  <preference name="BackupWebStorage" value="cloud" />
  <preference name="EnableViewportScale" value="false" />
  <preference name="KeyboardDisplayRequiresUserAction" value="true" />
  <preference name="MediaPlaybackRequiresUserAction" value="false" />
  <preference name="SuppressesIncrementalRendering" value="false" />
  <preference name="TopActivityIndicator" value="gray" />
  <preference name="GapBetweenPages" value="0" />
  <preference name="PageLength" value="0" />
  <preference name="PaginationBreakingMode" value="page" />
  <preference name="PaginationMode" value="unpaginated" />
  <feature name="LocalStorage">
    <param name="ios-package" value="CDVLocalStorage" />
  </feature>
  <preference name="UIWebViewDecelerationSpeed" value="normal" />
  <preference name="monaca:AndroidIsPackageNameSeparate" value="false" />
  <preference name="monaca:targetFamilyiPhone" value="1" />
  <preference name="monaca:targetFamilyiPad" value="1" />
  <platform name="android">
    <icon density="ldpi" src="resources/android/icon/drawable-ldpi/icon.png" />
    <icon density="mdpi" src="resources/android/icon/drawable-mdpi/icon.png" />
    <icon density="hdpi" src="resources/android/icon/drawable-hdpi/icon.png" />
    <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi/icon.png" />
  </platform>
  <platform name="android">
    <splash density="land-hdpi" src="resources/android/drawable-land-hdpi/screen.png" />
    <splash density="land-ldpi" src="resources/android/drawable-land-ldpi/screen.png" />
    <splash density="land-mdpi" src="resources/android/drawable-land-mdpi/screen.png" />
    <splash density="land-xhdpi" src="resources/android/drawable-land-xhdpi/screen.png" />
    <splash density="port-hdpi" src="resources/android/drawable-port-hdpi/screen.png" />
    <splash density="port-ldpi" src="resources/android/drawable-port-ldpi/screen.png" />
    <splash density="port-mdpi" src="resources/android/drawable-port-mdpi/screen.png" />
    <splash density="port-xhdpi" src="resources/android/drawable-port-xhdpi/screen.png" />
  </platform>
  <platform name="ios">
    <splash height="480" src="res/screen/ios/Default~iphone.png" width="320" />
    <splash height="960" src="res/screen/ios/Default@2x~iphone.png" width="640" />
    <splash height="1024" src="res/screen/ios/Default-Portrait~ipad.png" width="768" />
    <splash height="2048" src="res/screen/ios/Default-Portrait@2x~ipad.png" width="1536" />
    <splash height="768" src="res/screen/ios/Default-Landscape~ipad.png" width="1024" />
    <splash height="1536" src="res/screen/ios/Default-Landscape@2x~ipad.png" width="2048" />
    <splash height="1136" src="res/screen/ios/Default-568h@2x~iphone.png" width="640" />
    <splash height="1334" src="res/screen/ios/Default-667h.png" width="750" />
    <splash height="2208" src="res/screen/ios/Default-736h.png" width="1242" />
    <splash height="1242" src="res/screen/ios/Default-Landscape-736h.png" width="2208" />
    <splash src="res/screen/ios/Default@2x~universal~anyany.png" />
    <splash src="res/screen/ios/Default@2x~universal~comany.png" />
    <splash src="res/screen/ios/Default@2x~universal~comcom.png" />
    <splash src="res/screen/ios/Default@3x~universal~anyany.png" />
    <splash src="res/screen/ios/Default@3x~universal~anycom.png" />
    <splash src="res/screen/ios/Default@3x~universal~comany.png" />
  </platform>
  <plugin name="cordova-plugin-camera" spec="~2.4.0" />
  <plugin name="cordova-plugin-compat" version="1.1.0" />
  <plugin name="cordova-plugin-file" spec="~4.3.2" />
  <plugin name="cordova-plugin-inappbrowser" version="1.7.0" />
  <plugin name="cordova-plugin-splashscreen" version="4.0.2" />
  <plugin name="cordova-plugin-whitelist" version="1.3.2" />
</widget>
person Rizo    schedule 17.04.2017
comment
Выглядит нормально. ‹Access origin = * /› должен позволить вам получить доступ к любому URL-адресу за пределами приложения. - person L Balsdon; 17.04.2017
comment
Я все перепробовал ... Я создал пустое приложение с нуля и просто добавил плагин белого списка с помощью простого GET, и это тоже не работает. это может быть конфигурация ПК? - person Rizo; 17.04.2017
comment
Как ты тестируешь? На устройстве или симуляторе? Можете ли вы протестировать в хроме и осмотреть консоль? - person L Balsdon; 17.04.2017
comment
В Chrome он работает нормально, также через Ripple он отлично работает .. Он выдает ошибку только при установке apk на фактическое устройство - person Rizo; 17.04.2017
comment
Я обновил свой ответ информацией об обнаружении и игнорировании ошибок статуса 0. - person L Balsdon; 17.04.2017
comment
Я попробовал ваш код, приведенный выше, и, к сожалению, он все еще не работал ... Тем не менее, я создал учетную запись Phonegap Build, я загрузил проект, установил приложение на свое устройство, и оно отлично работает! Означает ли это, что это как-то связано с моей конфигурацией визуальной студии? - person Rizo; 17.04.2017

Изменить 2:

Попробуйте использовать этот код в любом месте над функцией Ajax.

$(document).ajaxError(function(e, jqxhr, settings, exception) { 
    if (jqxhr.readyState == 0 || jqxhr.status == 0) {
         return; 
    }
 });

Это перехватит ошибку статуса 0 и позволит jQuery проигнорировать ее и продолжить выполнение запроса Ajax.

Используйте его только для отладки.

Изменить

Попробуйте следующее.

$.ajax({
   url: 'YourRestEndPoint',
   headers: {'yourHeaderKey': 'yourHeaderValue',
'yourHeaderKey2': 'yourHeaderValue2'},
   method: 'POST',
   data: {},
   success: function(data){
        console.log('succes: '+data);
    },
    error: function (jqXHR, textStatus, errorThrown){

        console.log(jqXHR + " " + textStatus + " " + errorThrown);

        console.log(jqXHR.status);

    }
});

Это должно немного лучше регистрировать ошибки.

Из вашего вопроса я вижу, что вы пытаетесь отправить данные POST на сервер, однако в коде вы используете запрос GET. Принимает ли конечная точка как POST, так и GET или только POST.

Исходный. Если у вас возникла ошибка "Имя не разрешено", удостоверились ли вы, что URL правильный? Вы запускаете конечную точку на контролируемом вами сервере? Хостинг у вас или у третьей стороны? Есть ли проблема с поиском в DNS? Если вы попробуете известную рабочую конечную точку, правильно ли работает тот же код?

Может быть вызвано множеством или различными факторами.

Плагин белого списка должен автоматически устанавливаться в последней версии Cordova.

person L Balsdon    schedule 16.04.2017
comment
URL-адрес правильный, я попытался ввести URL-адрес с помощью почтальона, и есть ответ. У меня есть полный контроль над сервером конечных точек, поиск DNS в порядке. Конечная точка отлично работает локально внутри эмулятора Ripple. Как я могу это отладить? - person Rizo; 17.04.2017
comment
Смотрите мою правку для лучшей регистрации ошибок. Также попробуйте мой формат для вашего запроса Ajax с помощью jQuery. - person L Balsdon; 17.04.2017
comment
Он принимает как POST, так и GET, я попробовал JS, который вы мне отправили. Вывод для jqHXR: [object Object] controllers.js (111,25) { [functions]: , __proto__: { }, readyState: 0, status: 0, statusText: error } - person Rizo; 17.04.2017
comment
Я добавил строку для регистрации статуса. Можете ли вы попробовать и рассказать мне, что вы получите. - person L Balsdon; 17.04.2017
comment
Он возвращает ноль (0) в моем вышеупомянутом комментарии, вы увидите, что статус регистрируется как status: 0 - person Rizo; 17.04.2017
comment
Извините да что бы написать. Можете ли вы опубликовать копию вашего config.xml? - person L Balsdon; 17.04.2017