2016-02-01 2 views
1

Я пытаюсь отправить HTTP GET-запрос, и все работает отлично, пока я тестирую. Но когда я создаю приложение и пытаюсь отправить запрос, я получаю ошибку 404.Phonegap - ошибка 404 после сборки

Вот мой index.html

<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="format-detection" content="telephone=no" /> 
    <meta name="msapplication-tap-highlight" content="no" /> 

    <access origin="*" /> 
    <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 --> 
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 
    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://google.com"> 
    <link rel="stylesheet" type="text/css" href="css/index.css" /> 
    <title>Hello World</title> 
</head> 
<body> 
    <div class="app"> 
     <h1>PhoneGap</h1> 
     <div id="deviceready" class="blink"> 



      <p class="event listening">Connecting to Device</p> 
      <p class="event received">Device is Ready</p> 
     </div> 
    </div> 
    <script type="text/javascript" src="cordova.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript"> 
     app.initialize(); 


     var start = Date.now(); 
     var xmlhttp; 

     if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      // code for IE6, IE5 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == XMLHttpRequest.DONE) { 
       if(xmlhttp.status == 200){ 
        //alert(Date.now() - start); 
        alert("yeah"); 

       } 
       else if(xmlhttp.status == 400) { 
        alert('There was an error 400'); 
       } 
       else { 
        alert("else: " + xmlhttp.status); 
       } 
      } 
     } 


xmlhttp.open("GET", "http://google.com", true); 
xmlhttp.send(); 



    </script> 
</body> 

Я новичок в PhoneGap и я уверен, что это так же просто, как он получает, но я ничего не могу найти на Google.

Заранее спасибо

+0

Является ли 'http: // myserver/ping' действительным URL? Вы уверены, что там нет «.com» или номера порта или чего-то там? – NoChinDeluxe

+0

Да, это открытая апи, поэтому я не хочу публиковать реальный url – OffDoor

ответ

1

Вполне вероятно, что вам необходимо установить Content Security Policy мета-тег в вашем index.html, как Кордова/PhoneGap 5 или выше, потребует этого.

пример будет выглядеть следующим образом (в головной части index.html):

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

Перестановка http://myserver для сервера, который вы пытаетесь получить доступ. Вы на самом деле могут быть получать сообщения об ошибках, такие как это в JS консоли, если это ваша проблема:

Refused to connect to ‘http://myserver/ping' because it violates the following Content Security Policy directive: “default-src ‘self’ data: gap: https://ssl.gstatic.com ‘unsafe-eval’”. Note that ‘connect-src’ was not explicitly set, so ‘default-src’ is used as a fallback. 

SecurityError: DOM Exception 18: Была сделана попытка прорвать политики безопасности пользовательского агента.

This post может помочь с пониманием политики безопасности контента.

+0

Спасибо, что ответили. Я пробовал это, но все равно не повезло. Я отредактировал мой вопрос с обновленным index.html – OffDoor

+0

Пробовали ли вы использовать URL API в браузере на устройстве/симуляторе, на котором вы тестируете приложение, - только чтобы убедиться, что API доступен из этого устройства/симулятора? Удаленная проверка приложения PhoneGap и наличие открытой консоли JS показывают полезные сообщения об ошибках? –

+0

Я использую http://google.com для тестирования и по-прежнему сбой и не получаю ошибок – OffDoor

0

Здесь я предположил, что вы используете версию Phonegap «cli-5.2.0» и сталкиваетесь с проблемой на Android. Чтобы исправить 404 проблемы, добавьте следующие строки в config.xml файла

<gap:plugin name="cordova-plugin-whitelist" source="npm" /> 
<access origin="*" /> 
<allow-intent href="*" /> 
<allow-navigation href="*" /> 

Whitelist плагин необходим для использования с PhoneGap «CLI-5.2.0», чтобы успешно сделать запрос к любому серверу. Ссылка для белого списка плагинов https://github.com/apache/cordova-plugin-whitelist

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