Как проверить, доступно ли подключение к Интернету для нескольких страниц в приложении Windows 8 Store HTML/JS?

На домашней странице я использовал функцию registerForNetworkStatusChangeNotif() (который я позаимствовал из MSDN) для регистрации изменения сетевого уведомления. Функция добавляет прослушиватель событий networkstatuschanged, и он отлично работает только для этой страницы, т.е. отображается ошибка, когда подключение прерывается, и страница автоматически обновляется при восстановлении подключения -

var networkInfo = Windows.Networking.Connectivity.NetworkInformation; ... networkInfo.addEventListener («статус сети изменен», onNetworkStatusChange);

Как я должен обрабатывать проверку доступности Интернета для других страниц?

Я попытался зарегистрировать эту функцию в default.js, чтобы она была доступна для всех страниц. Мое приложение использует функцию геолокации, и событие statuschanged конфликтует с событием networkstatuschanged, и мое приложение не может показать ошибку потери подключения к Интернету. Как я могу решить эту проблему, чтобы недоступность подключения к Интернету обрабатывалась должным образом.


person mvp    schedule 13.11.2012    source источник
comment
Не могли бы вы предоставить немного больше контекста, чтобы увидеть, как вы добавляете этот прослушиватель событий? Вы его где-нибудь убрали?   -  person louis.luo    schedule 17.12.2012


Ответы (2)


Вам нужно прослушать конкретное событие. И когда он срабатывает, вы проверяете подключение к Интернету.

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:
           ...
    }
    ...
}
person Cœur    schedule 10.04.2013

Я ожидаю, что автоматическое обновление страницы связано с привязкой данных. Чтобы иметь больший контроль, вам нужно будет привязаться к сетевому объекту на странице «готово» и снова отменить привязку на странице «выгрузить». Например:

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(...)
}

Все, что вам нужно, это определить метод обработчика '_doSomething()' для проверки сведений о подключении, переданных объектом 'event', и соответственно активировать логику привязки/обновления.

Надеюсь это поможет!

person gplumb    schedule 11.01.2013