2012-11-13 14 views
5

Na stronie głównej użyłem funkcji registerForNetworkStatusChangeNotif() (which I borrowed from MSDN) do rejestracji zmiany powiadomienia o sieci. Funkcja dodaje sieć detektorów zdarzeń i działa dobrze tylko dla tej strony, tzn. W przypadku przerwania połączenia pojawia się błąd, a strona jest odświeżana automatycznie po przywróceniu łączności -Jak sprawdzić, czy połączenie internetowe jest dostępne dla wielu stron w systemie Windows 8 Przechowuj aplikację HTML/JS?

var networkInfo = Windows.Networking.Connectivity.NetworkInformation; ... networkInfo.addEventListener ("networkstatuschanged", onNetworkStatusChange);

Jak powinienem obsługiwać sprawdzanie dostępności Internetu na innych stronach?

Próbowałem zarejestrować tę funkcję w pliku default.js, aby była dostępna dla wszystkich stron. Moja aplikacja korzysta z funkcji Geolokalizacji i zdarzenie statuschanged zderza się ze zdarzeniem networkstatuschanged, a moja aplikacja nie pokazuje utraty połączenia z Internetem. W jaki sposób mogę rozwiązać ten problem, aby obsługa łączy internetowych była właściwie obsługiwana.

+0

Czy możesz podać trochę więcej kontekstu, aby zobaczyć, jak dodać ten detektor zdarzeń? Czy usunąłeś go w dowolnym miejscu? –

Odpowiedz

4

Musisz słuchać określonego wydarzenia. Po uruchomieniu sprawdzasz połączenie z Internetem.

var networkInformation = Windows.Networking.Connectivity.NetworkInformation; 
... 

ready: function(element, options) 
{ 
    // Registering for connection change 
    networkInformation.addEventListener("networkstatuschanged", this.onNetworkStatusChanged); 
    ... 
} 

unload: function() 
{ 
    // Unregistering for connection change 
    networkInformation.removeEventListener("networkstatuschanged", this.onNetworkStatusChanged); 
    ... 
} 

onNetworkStatusChanged: function(eventArgs) 
{ 
    // Retrieve the InternetConnectionProfile 
    var internetConnectionProfile = networkInformation.getInternetConnectionProfile(); 
    // Accesses the NetworkConnectivityLevel 
    var networkConnectivityLevel = internetConnectionProfile.getNetworkConnectivityLevel(); 
    // Switch on NetworkConnectivityLevel 
    switch (networkConnectivityLevel) { 
     case Windows.Networking.Connectivity.NetworkConnectivityLevel.none: 
      ... 
     case Windows.Networking.Connectivity.NetworkConnectivityLevel.localAccess: 
      ... 
     case Windows.Networking.Connectivity.NetworkConnectivityLevel.constrainedInternetAccess: 
      ... 
     case Windows.Networking.Connectivity.NetworkConnectivityLevel.internetAccess: 
      ... 
    } 
    ... 
} 
2

Oczekuję, że automatyczna strona "odśwież" jest spowodowana wiązaniem danych. Aby mieć większą kontrolę, musisz powiązać obiekt sieciowy na stronie "gotowy" i odłączyć ponownie na stronie "zwolnij". Na przykład:

var networkInfo = Windows.Networking.Connectivity.NetworkInformation; 
this.networkHandler = this._doSomething(); 
... 
.. 

ready: function(element, options) 
{ 
    networkInfo.addEventListener(this.networkHandler); 
    ... 
    .. 
} 

unload: function() 
{ 
    networkInfo.removeEventListener(this.networkHandler); 
    ... 
    .. 
} 

_doSomething : function(event) 
{ 
    // Examine the 'event' object and perform 'refresh' accordingly 
    // Most likely a call to WinJS.Binding.processAll(...) 
} 

Wszystko byś wtedy potrzebne jest zdefiniowanie metody handler '_doSomething() aby zbadać szczegóły połączeń przekazywanych przez obiekt „zdarzenie” i wyzwolić swój wiążący/logika odświeżania odpowiednio.

Mam nadzieję, że to pomoże!