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

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

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

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

Я пытался:

  1. navigator.onLine , он всегда дает одно и то же значение.
  2. document.addEventListener("online", ... не запускается
  3. 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 с Android 4.4.2

https://youtu.be/wHJHG5dP_eM


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

Solutions Collecting From Web of "Проверьте подключение к Интернету в Android WebView (Cordova)"

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

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

 navigator.onLine 

не работает, потому что (на андроиде) он сломан («сырая» версия, веб-просмотр с поддержкой Cordova отличается) (как вы выяснили), вы должны создать свое приложение WebView с помощью Кордовой Framework . Кордова была разработана ТОЧНО, чтобы решить эту проблему. 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" /> 

Кордова Разрешения: app / res / xml / config.xml

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

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

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

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

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

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

Пример файла

 node-v4.5.0-x86.msi 

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

 success. 

На Windows:

 C:\>npm install -g cordova 

И уходите!

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

Демо-изображение в автономном режиме Демо-изображение онлайн

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