Как периодически проверять подключение к Интернету в Phonegap?
Я работаю с Phonegap. Мне нужно периодически проверять сетевое подключение. На самом деле я получаю некоторые данные с сервера. Если соединение отсутствует, мне нужно показать предупреждение об ошибке.
Я искал ее и нашел решение. Но это не нормально. Потому что мне нужно периодически проверять соединение.
<html>
<head>
<title>navigator.network.connection.type Example</title>
<script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for PhoneGap to load
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
checkConnection();
}
function checkConnection() {
var networkState = navigator.network.connection.type;
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
alert('Connection type: ' + states[networkState]);
}
</script>
</head>
<body>
<p>A dialog box will report the network state.</p>
</body>
</html>
Он проверяет только первый раз, когда приложение запускается. Но мне нужно периодически проверять это, потому что я занимаюсь программированием сокетов. Если есть проблема с Интернетом, мне нужно показать его. Но этот код отображается только во время запуска.
Ответы
Ответ 1
Рабочий пример: http://jsfiddle.net/Gajotres/d5XYR/
Используйте таймер интервала для проверки подключения к Интернету с каждым предопределенным временем. Это решение требует браузера HTML5, но это не проблема, потому что jQuery Mobile уже требует браузер HTML5. В этом случае таймер будет проверять подключение к Интернету каждые 100 мс и устанавливать конечный результат в глобальную переменную javascript.
Все зависит от этой строки:
window.navigator.onLine -- it will be false if the user is offline.
Окончательное решение:
var connectionStatus = false;
$(document).on('pagebeforeshow', '#index', function () {
setInterval(function () {
connectionStatus = navigator.onLine ? 'online' : 'offline';
}, 100);
$(document).on('click', '#check-connection', function () {
alert(connectionStatus);
});
});
Протестировано:
-
Windows Firefox
-
Windows Google Chrome
-
Windows IE9 и IE10
-
Android 4.1.1 Chrome
-
iPad 3 Safari
-
iPad3 Chrome
Ответ 2
Возможно, вы могли бы использовать "онлайн" и "автономные" прослушиватели событий в документе, чтобы уведомлять свое приложение, когда оно становится онлайн или офлайн, как описано в документах, например. здесь: http://docs.phonegap.com/en/3.2.0/cordova_events_events.md.html#online
Ответ 3
К сожалению, ответ нестабилен в Chrome и Safari, а также в нескольких мобильных браузерах. Это не дает вам "реальное подключение к Интернету", а скорее "состояние сетевого подключения". См:
https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.onLine
"В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен, все остальные условия возвращают true. Поэтому, когда вы можете предположить, что браузер отключен, он возвращает ложное значение, вы не можете предположить, что истинное значение обязательно означает, что браузер может получить доступ к Интернету. Вы можете получать ложные срабатывания, например, в тех случаях, когда на компьютере работает программное обеспечение для виртуализации, в котором есть виртуальные адаптеры Ethernet, которые всегда" подключен ". Поэтому, если вы действительно хотите определить онлайн-статус браузера, вы должны разработать дополнительные средства для проверки. Чтобы узнать больше, см. статью" HTML5 Rocks "," Работа с сеткой".
Смотрите эту статью HTML5 Rocks для настоящего стабильного решения - больше работы, конечно:
http://www.html5rocks.com/en/mobile/workingoffthegrid/
Ответ 4
Попробуйте этот код,
<script>
$(document).ready(function () {
document.addEventListener("deviceready", onDeviceReady, false);
document.addEventListener("online", onOnline, false);
document.addEventListener("offline", onOffline, false);
function onDeviceReady() {
//onDeviceReaddy
}
function onOnline() {
//onOnline
}
function onOffline() {
navigator.notification.alert(
'Please Check your internet connection.', // message
null, // callback
'AllCare Doctor', // title
'OK' // buttonName
);
}
</script>
Для получения более подробной информации нажмите здесь..!