Подтвердить что ты не робот

Проверьте подключение к Интернету в Android WebView (Cordova)

Я знаю, что в Stackoverflow есть много вопросов и ответов, я читал их много, но никто из них не работает.

Я пояснил в заголовке Android WebView, потому что это самая важная цель, но я хотел бы, чтобы это работало и на других устройствах. Я протестировал следующий код в приложении , построенном с Intel XDK, установленном на SM-G355M с Android 4.4.2 и на Safari, установленном на iPhone 5C с iOS 9.3.4;

Все, что я получаю в обоих случаях, это одно и то же значение, true (иногда я получаю false, даже если у меня есть интернет-соединение).

Я пробовал:

  • navigator.onLine, он всегда дает одно и то же значение.
  • document.addEventListener("online", ... не вызывает
  • ajax не работает, так или иначе не влияет на сервер?

Код: https://nanilab.com/stackoverflow/webview-internet-connection.php (эта ссылка сейчас нарушена)


Вариант 1:

function option1(){
    var isOffline = 'onLine' in navigator && !navigator.onLine,
        text = isOffline == true ? ' without connection ' : ' connected ';

    $('.option-one span').text(text);
    $('.option-one i').text('checked').hide().fadeIn(200);

    setTimeout(function(){
        option1();
    }, 1000);
}

Вариант 2:

window.addEventListener("offline", function(){ $('.option-two span').text(' without connection'); }, false);
window.addEventListener("online", function(){ $('.option-two span').text(' connected'); }, false);

Вариант 3:

function option3(){
    $.ajax({
        url: '/stackoverflow/blank.php',
        success: function(data){
            print(' connected ');
        },
        error: function(jqXHR, textStatus, error) {
            print(' without connection ');
        }
    }); 

    function print(text){
        $('.option-three span').text(text);
        $('.option-three i').text('checked').hide().fadeIn(200);

        setTimeout(function(){
            option3();
        }, 2000);
    }
}

приложение, построенное с помощью Intel XDK, установленное на SM-G355M with Android 4.4.2

https://youtu.be/wHJHG5dP_eM


Что я делаю неправильно?

4b9b3361

Ответ 1

Apache Кордова (называлась PhoneGap) - это среда разработки мобильных. Он позволяет использовать веб-технологии стандартные - HTML5, CSS3 и JavaScript для разработки cross-platform. Приложения выполняются в упаковках, ориентированных на каждую платформу, и полагаются на привязки стандартов API для доступа к любым возможностям устройств, таким как датчики, данные, статус сети и т.д. ссылка на документ cordova

В вашей проблеме (вариант 1):

navigator.onLine 

... работает не, потому что (на android) он разбит (версия "raw", cordova enabled webview)} (as вы обнаружили), вы должны создать свое приложение WebView с помощью Cordova Framework. cordova был разработан ТОЧНО для решения этой проблемы. GAP в PhoneGap - это разрыв между "виртуальной машиной", "песочницей" и доступом к аппаратным средствам, И, кросс-платформенным.

Разрешения для Android: приложение /AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Кордова Разрешения: Приложение /RES/XML/config.xml

<feature name="NetworkStatus">
    <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
</feature>

Краткое руководство cordova установка

веб-страница goto для инструкций по установке

https://cordova.apache.org/docs/en/latest/guide/cli/

перейти на веб-страницу и загрузить nodejs для вашей системы

https://nodejs.org/en/download/

пример файла

node-v4.5.0-x86.msi

запустить (установить)

success.

в Windows:

C:\>npm install -g cordova

И уходите!

Я построил ваш код в cordova, я добираюсь туда (надеюсь, тяжелая проблема), вот некоторое изображение того, что у меня есть до сих пор [еще не в WebView, {см. навигатор .userAgent на втором изображении}] (обратите внимание, что прослушиватель событий работает, O), но недостаточно хорош: o().

demo image offline демо-изображение онлайн

Ответ 2

В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен; все остальные условия верны. Поэтому, когда вы можете предположить, что браузер отключен, когда он возвращает ложное значение, вы не можете предположить, что истинное значение обязательно означает, что браузер может получить доступ к Интернету. Вы можете получать ложные срабатывания, например, в тех случаях, когда на компьютере работает программное обеспечение для виртуализации с виртуальными адаптерами Ethernet, которые всегда "подключены". Поэтому, если вы действительно хотите определить онлайн-статус браузера, вы должны разработать дополнительные средства для проверки. Чтобы узнать больше, см. Статью HTML5 Rocks, http://www.html5rocks.com/en/mobile/workingoffthegrid/