2015-08-21 2 views
1

Я хочу проверить, есть ли у устройства доступ в Интернет. Из официальной документации Cordova:Каков наилучший способ проверить, имеет ли устройство доступ в Интернет?

Этот код, только чтобы получить connection type

function checkConnection() { 
    var networkState = navigator.connection.type; 

    var states = {}; 
    states[Connection.UNKNOWN] = 'Unknown connection'; 
    states[Connection.ETHERNET] = 'Ethernet connection'; 
    states[Connection.WIFI]  = 'WiFi connection'; 
    states[Connection.CELL_2G] = 'Cell 2G connection'; 
    states[Connection.CELL_3G] = 'Cell 3G connection'; 
    states[Connection.CELL_4G] = 'Cell 4G connection'; 
    states[Connection.CELL]  = 'Cell generic connection'; 
    states[Connection.NONE]  = 'No network connection'; 

    alert('Connection type: ' + states[networkState]); 
} 

checkConnection(); 

Но как я могу проверить, если устройство действительно есть доступ в Интернет? То есть, возможно, устройство подключено к маршрутизатору с использованием типа соединения WiFi, но у него нет доступа к Интернету, а только локального доступа. В этом случае возвращается checkConnection();: WiFi connection.

Или это связано с оператором телефонной сети 3G, но у пользователя нет достаточных кредитов для Интернета. В этом случае возвращается checkConnection();: Cell 3G connection

Но в обоих случаях у пользователя нет реального доступа в Интернет, хотя если он подключен.

Единственное, что я думаю, что это пинг Google или другой сервер, чтобы проверить, действительно имеет доступ к Интернету, в случае states[networkState] != No network connection

Или вы думаете, navigator.onLine может работать на всех устройствах (Android, IOS, ? Blackbery 10

Я надеюсь, что я выразил хорошо, мой английский действительно сосет

ответ

4

Хм ... вот это обсуждение http://iswwwup.com/t/f3e5374b74ca/android-cordova-plugin-to-detect-internet-connection.html

И решение они упоминали ...

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

function testInternet(win,fail){ 
    $.get("http://www.google.fr/blank.html").done(win).fail(fail); 
} 
Or , 

function testInternet(win,fail){ 
    $.ajax({ 
     url:"http://www.google.fr/blank.html", 
     timeout:5000, //timeout to 5s 
     type: "GET", 
     cache: false 
     }).done(win).fail(fail); 
} 
+0

Последнее, как я могу изменить этот скрипт, чтобы вызвать «предупреждение», если есть доступ в Интернет в случае «выигрыша»? – candlejack

+1

это может помочь: testInternet (функция() {alert («Имеет интернет-соединение»);}, function() {alert («Не имеет Интернета»);}); – Tushar

1

Лучше идти с конвенцией быть онлайн и оффлайн Проверьте официальную документацию здесь:.. http://docs.phonegap.com/en/1.8.1/cordova_events_events.md.html#online

+0

Как вы думаете, что если я подключен к Wi-Fi сети *** без доступа в Интернет *** запускается онлайн-мероприятие? Поскольку я буду «подключен», но «без Интернета». – candlejack

+0

Хм ... вот это обсуждение http://iswwwup.com/t/f3e5374b74ca/android-cordova-plugin-to-detect-internet-connection.html И решение они упоминали ... функции для проверки этого адреса, чтобы проверить, имеет ли устройство доступ к Интернету, будет выглядеть так: функция testInternet (победа, сбой) { $ .get ("http://www.google.fr/blank.html"). сделано (победа) .fail (обязательно); } Or, функция testInternet (выигрыш, сбой) { $.ajax ({ url: "http://www.google.fr/blank.html", таймаут: 5000, // таймаут до 5s тип: "GET", cache: false }). done (win) .fail (сбой); } – Tushar

+0

Пожалуйста, добавьте его в свой ответ для четкого чтения. – candlejack

3

Существует плагин, который поможет вам сделать это: Network information

попробовать его с тестовой функции к URL, что проверить ваш запрос, если он не работает, то у НУ сделать Somthing еще, как описано здесь много ответов, или использовать

document.addEventListener("online", onOnline, false); 
function onOnline() { // Handle the online event} 

document.addEventListener("offline", onOffline, false); 
function onOffline() { // Handle the offline event} 

Помните, чтобы обернуть эти функции внутри document.addEventListener('deviceready', function() {}, false);

+1

Сетевая информация проверяет только, подключено ли устройство к Wi-Fi или службе сотовой связи ... когда нет ни одного, он отключает метод onOffline. Однако, если вы находитесь на Wi-Fi и говорите, что маршрутизатор выключен или ваш интернет-провайдер недоступен, он не может вам помочь. Поскольку вы «подключены» к Wi-Fi, это воспринимается как «онлайн». Комбинация этого ответа и ответа @Tushar должна охватывать все базы. – greaterKing

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