2016-07-29 2 views
0

Я использую Cordova 6.3.0 и запросы AJAX с устройств Android не работают. Я уже прочитал и попробовал что-нибудь полезное, которое мог найти, и сам не могу решить эту проблему.Запросы AJAX не работают (не удалось выполнить 'open'): Cordova Android

Я использую запрос JQuery Ajax для вызова сервера, который возвращает определенную пользователем информацию (простые целые числа):

$.ajax({ 
    url : ENDPOINT_SERVER_API,  // e.g. http://www.example.com 
    async: false, 
    success: function(data, status) { 
     // display normal UI 
     // render view 
    }, 
    error : function(XMLHttpRequest, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 

я установил cordova-plugin-whitelist и она указана в config.xml с помощью <plugin name="cordova-plugin-whitelist" spec="1" />.

Кроме того, я использовал и попытался несколько различных <meta http-equiv="Content-Security-Policy" .../> теги, такие как:

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

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://example.com:*"> 

<meta http-equiv="Content-Security-Policy" content="default-src 'self' example.com"> 

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

Мой config.xml выглядит следующим образом:

<content src="index.html" /> 
<plugin name="cordova-plugin-whitelist" spec="1" /> 
<access origin="*" subdomains="true"/> 
<allow-navigation 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:*" /> 

сообщение об ошибке, что я получаю это :

{"stack":"Error: Failed to execute 'open' on 'XMLHttpRequest': 
    Refused to connect to 'http:\/\/mydomain.com\/?action=get_user_specific_data&user=23afadf83bc3848' 
    because it violates the document's Content Security Policy. 
    at Error (native) 
    at Object.k.cors.a.crossDomain.send (file:\/\/\/android_asset\/www\/lib\/jquery.js:4:14351) 
    at Function.n.extend.ajax (file:\/\/\/android_asset\/www\/lib\/jquery.js:4:10579) 
    at null.<anonymouse> (file:\/\/\/android_asset\/www\/js\/app.js:63:10) 
    at Channel.fire (file:\/\/\/android_asset\/www\/cordova.js:822:23) 
    at file:\/\/\/android_asset\/www\/cordova.js:231:49"} 

Теперь, я также прочитал plugin documentation, но не могут найти обходной путь к этой проблеме.

Проблема возникает только для Android, iOS работает как шарм.

Как я могу это решить?

Любая помощь была бы принята с благодарностью!

+0

Вы позволили перекрестный доступ к ресурсам из стороны сервера? –

+0

Думаю, что да; я добавил 'header ('Access-Control-Allow-Origin: *');' на страницу, обслуживающую пользовательский контент. – dabe

+0

как вы создали сборку Android? –

ответ

0

был тот же самый вопрос, который я добавил это в config.xml

<allow-navigation href="*" /> 

    <access origin="*"/> 

мой HTML

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

К сожалению, это не решает проблему. – dabe

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