2013-07-24 39 views
8

Jaki jest najłatwiejszy sposób sprawdzenia, czy urządzenie (smartfon) jest online czy offline. Pracuję z phonegap, jquery mobile. Znalazłem ten.Jak sprawdzić urządzenie to Online lub Offline Phonegap

document.addEventListener("online", yourCallbackFunction, false); 

Co chcę zrobić jest sprawdzenie połączenia z Internetem oraz zdecydować o, aby uzyskać dane z internetu lub z urządzenia lokalnej bazy danych.

if(deviceoffline) 
    getDataFromLokalDatabase(); 
else 
    getDataFromInternet(); 

Odpowiedz

9

Można użyć navigator.onLine:

var isOffline = 'onLine' in navigator && !navigator.onLine; 

if (isOffline) { 
    //local db 
} 
else { 
    // internet data 
} 

jednak mieć świadomość, że jeśli navigator.onLine nie jest obsługiwana isOffline zawsze będzie fałszywa

+0

Okej, testuję to normalnie w przeglądarce Chrome i uzyskuję tylko fałsz. Ale tworzę aplikację za pomocą phonegapa i testuję ją na moim smartfonie i działa. Dzięki NULL. U bardzo mi pomogło :) –

+0

navigator.onLine nie działa niezawodnie, przynajmniej nie w mojej aplikacji PhoneGapp (Nexus 4 z Androidem 5); navigator.onLine jest jednak obsługiwanym atrybutem. Znalazłem również to powiązane pytanie: http://stackoverflow.com/questions/14283124/navigator-online-not-always-working. –

2

jQuery wykonać połączenie AJAX i sprawdź kod błędu , Jeśli otrzymasz kod błędu 0, urządzenie jest nieaktywne

$.ajax({ 
    //your ajax options 
    error: function (request) { 
     if (request.status == 0) { 
      alert("you're offline"); 
     } 
    } 
}); 
+1

Status 0 oznacza, że ​​serwer nie odpowiada na żądanie. To * może * być, ponieważ urządzenie jest w trybie offline, ale niekoniecznie oznacza, że ​​tak jest. – Jonathan

+0

jednak - w większości przypadków zależy Ci na tym, czy Twoja aplikacja może komunikować się z Twoim serwerem ... więc jest to istotne! – hajikelist

0

Natywny onLine jest nieco chwiejny, zwłaszcza w środowisku aplikacji internetowych .. ale może być użyty do wstępnego sprawdzenia na pageLoad, jednak jest nieco bezużyteczny, jak gdyby do tego momentu masz połączenie z Internetem.

Próba na coś ajax jest o wiele bardziej niezawodna.

10

Jest to kod za pomocą natywnego kodu PhoneGap:

function checkInternet() { 

    var networkState = navigator.connection.type; 

    if(networkState == Connection.NONE) { 

     onConnexionError(); 
     return false; 

    } else { 

     return true; 
    } 
} 
+2

powinieneś sprawdzić także 'Connection.UNKNOWN' – Mirko

1

Uważaj, podczas navigator.onLine to najprostsze rozwiązanie, nie zachowywać się konsekwentnie na wszystkich przeglądarkach. W Chrome pokaże Ci, że jest podłączony do Internetu, jeśli masz kabel LAN, nawet jeśli nie masz internetu.

Można użyć wtyczki Cordova network-information

Można również starać się żądania AJAX do serwera; zwykle chcesz wiedzieć, czy jesteś offline, ponieważ w tym przypadku nie można komunikować się z serwerem, więc "offline" często oznacza "nie można komunikować się z serwerem" (co może być również spowodowane tym, że serwer jest w trybie offline). Odtwarzanie z limitami czasu lub kilkoma żądaniami jest również przydatne, jeśli musisz sprawdzić przepustowość lub jakość łącza.

Offline nie oznacza to samo dla każdego przypadku użycia, najpierw musisz wiedzieć, która z powyższych metod jest dla Ciebie najbardziej odpowiednia, a następnie wdrożyć jedną lub kilka z nich.

Co chcę zrobić, to sprawdzić połączenie z Internetem i zdecydować o otrzymaniu danych z Internetu lub z lokalnej bazy danych urządzenia.

Wygląda na to, że sprawdzanie połączenia z serwerem za pomocą żądania jest najlepszą opcją.