2016-11-16 3 views
1

У меня есть гибридное мобильное приложение на основе Angular (Cordova). Я внедрил Google Maps Api, и перед загрузкой этого api мне нужно проверить наличие Интернета. Я пробовал с navigator.connection.type, но это только говорит мне, связано ли устройство с сетью, а не с интернет-статусом. Я имею в виду, я могу подключиться к Wi-Fi сети, и у этой сети нет доступа к Интернету. Таким образом, выяснить это, я попытался это:Cordova check device internet access

 $scope.checkInternetAvail = function(){ 
      var deferred = $q.defer(); 

      $.get("http://www.google.com.ec/blank.html"). 
       done(function(xh){ 
       deferred.resolve(true); 
      }).fail(function(er){ 
       deferred.reject(); 
      }); 

      return deferred.promise; 
     }; 

Но когда я огнь этой функции, я получаю ошибку, связанную CORS:

XMLHttpRequest cannot load http://www.google.com.ec/blank.html . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:63342 ' is therefore not allowed access.

И до сих пор я из идей , Любое решение?

Thank's!

ответ

2

К сожалению, приложение cordova работает на вашем устройстве. Он не работает на сетевом коммутаторе/маршрутизаторе. Пока еще нет способа, чтобы ваше устройство могло спросить вашего маршрутизатора, есть ли у него рабочий доступ в Интернет, и маршрутизатор может подтвердить, что да, есть или нет. Что вы можете сделать на своем устройстве только для обнаружения доступа к сети.

Единственная вещь, которую вы можете сделать, это отправить HTTP-запрос на что-то вроде google, который почти никогда не работает, в случае готовности устройства или когда требуется, если он отвечает готовным состоянием, тогда ваш интернет в порядке, а в противном случае нет.

Функции, чтобы проверить этот адрес, чтобы проверить, если устройство имеет доступ к Интернету будет выглядеть следующим образом:

function testInternet(win,fail){ 
      $.get("https://people.googleapis.com/v1/people/me/connections").done(win).fail(fail); 
} 
Or , 

function testInternet(win,fail){ 
    $.ajax({ 
    url:"https://people.googleapis.com/v1/people/me/connections", 
    timeout:5000, //timeout to 5s 
    type: "GET", 
    cache: false 
    }).done(win).fail(fail); 
    } 

Аякс запрос ответ обратно 401 (Несанкционированный), который означает, что мы имеем доступ к Интернету, но мы Несанкционированные для что google api. здесь google api

The plugin does not detect if the user has access to the Internet, but only if the user is on a network. Since your phone is on a WiFi network even though the WiFi network doesn't have access to the Internet, the plugin is performing as designed.

+0

Я пробовал. Он не говорит вам, нет ли в сети доступа в Интернет. Вы читали мой пост? – Pablo

+0

Повторите попытку. –

+0

Это не говорит мне, имеет ли сеть, к которой я подключен, доступ в Интернет. Это просто говорит мне, связано ли устройство с сетью. Это то, что я сказал в начале – Pablo