Обнаружение подключения к Интернету отключено?

Как обнаружить интернет-соединение отключено в JavaScript?

    16 Solutions collect form web for “Обнаружение подключения к Интернету отключено?”

    Вы можете определить, что соединение потеряно, выполнив неудачные запросы XHR .

    Стандартный подход заключается в повторном запросе запроса несколько раз. Если он не проходит, сообщите об этом пользователю, чтобы проверить соединение и изящно выйти из строя .

    Sidenote: Поместить все приложение в состояние «в автономном режиме» может привести к множеству проблем, связанных с обработкой состояния. Возможны беспроводные соединения и т. Д. Таким образом, наилучшим вариантом может быть просто неудачное изложение, сохранение данных и предупреждать пользователя. Позволяя им в конечном итоге устранить проблему с подключением, если она есть, и продолжать использовать ваше приложение с достаточным количеством прощения.

    Sidenote: вы можете проверить надежный сайт, например google для подключения, но это может быть не совсем полезно, поскольку вы просто пытаетесь сделать свой собственный запрос, потому что, хотя Google может быть доступен, ваше собственное приложение может и не быть, и вы все еще собираетесь должны решить вашу проблему с подключением. Попытка отправить ping в google была бы хорошим способом подтвердить, что интернет-соединение само по себе не работает, поэтому, если эта информация вам полезна, тогда это может стоить проблем.

    Sidenote : Отправка Ping может быть достигнута так же, как если бы вы делали какой-либо двухсторонний запрос ajax, но отправка ping в google в этом случае создавала бы некоторые проблемы. Во-первых, у нас бы были одинаковые проблемы между доменами, которые обычно возникают при создании ajax-коммуникаций. Один из вариантов заключается в настройке прокси-сервера на стороне сервера, в котором мы фактически выполняем ping google (или любой другой сайт) и возвращаем результаты ping в приложение. Это catch-22 , потому что если интернет-соединение фактически является проблема, мы не сможем добраться до сервера, и если проблема подключения будет только в нашем собственном домене, мы не сможем разглядеть разницу. Можно использовать другие методы междоменного доступа, например, внедрение iframe на вашей странице, указывающее на google.com, а затем опрос iframe на предмет успеха / неудачи (проверьте содержимое и т. Д.). Вложение изображения может на самом деле не сказать нам ничего, потому что нам нужен полезный ответ от механизма связи, чтобы сделать хороший вывод о том, что происходит. Таким образом, определение состояния интернет-соединения в целом может быть более сложным, чем того стоит. Вам придется весить эти параметры для вашего конкретного приложения.

    IE 8 будет поддерживать свойство window.navigator.onLine .

    Но, конечно, это не помогает с другими браузерами или операционными системами. Я предсказываю, что другие поставщики браузеров решат предоставить это свойство, а также важность знать статус онлайн / оффлайн в приложениях Ajax.

    До тех пор, пока это не произойдет, запрос XHR или Image() или может предоставить что-то близкое к необходимой вам функциональности.

    Обновление (2014/11/16)

    Основные браузеры теперь поддерживают это свойство, но ваши результаты будут отличаться.

    Цитата из Mozilla Документация :

    В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен; все остальные условия true . Поэтому, когда вы можете предположить, что браузер отключен, когда он возвращает false значение, вы не можете предположить, что истинное значение обязательно означает, что браузер может получить доступ к Интернету. Вы можете получать ложные срабатывания, например, в тех случаях, когда на компьютере работает программное обеспечение для виртуализации с виртуальными адаптерами Ethernet, которые всегда «подключены». Поэтому, если вы действительно хотите определить онлайн-статус браузера, вы должны разработать дополнительные средства для проверки.

    В Firefox и Internet Explorer переключение браузера в автономный режим отправляет false значение. Все остальные условия возвращают true значение.

    Существует несколько способов сделать это:

    • AJAX запрос на ваш собственный сайт. Если этот запрос не удался, есть хороший шанс, что это ошибка при подключении. Документация JQuery содержит раздел по обработке неудачных запросов AJAX . Остерегайтесь одной и той же политики происхождения при этом, что может помешать вам получить доступ к сайтам за пределами вашего домена.
    • Вы могли бы поставить onerror в img , например

        

      Этот метод также может потерпеть неудачу, если исходное изображение перемещено / переименовано и, как правило, будет более низким выбором для опции ajax.

    Таким образом, существует несколько различных способов попытаться обнаружить это, но ни один из них не идеален, но при отсутствии возможности выпрыгнуть из песочницы браузера и напрямую получить доступ к статусу сетевого соединения пользователя, они, по-видимому, являются лучшими вариантами.

      if(navigator.onLine){ alert('online'); } else { alert('offline'); } 

    API-интерфейс кэша приложений HTML5 определяет navigator.onLine, который в настоящее время доступен в IE8 бета-версии, WebKit (например, Safari), но уже поддерживается в Firefox 3

    Как сказал olliej, использование свойства browser navigator.onLine предпочтительнее отправки сетевых запросов и, соответственно, с помощью developers.mozilla.org/En/Online_and_offline_events , оно поддерживается даже старыми версиями Firefox и IE.

    В последнее время WHATWG указала на добавление online и offline событий, если вам нужно реагировать на изменения navigator.onLine .

    Также обратите внимание на ссылку, опубликованную Даниэлем Силвейрой, которая указывает, что использование этих сигналов / свойств для синхронизации с сервером не всегда является хорошей идеей.

    Вы можете использовать обратный вызов error $ .ajax () , который срабатывает, если запрос терпит неудачу. Если textStatus равно строке «timeout», это означает, что соединение нарушено:

     function (XMLHttpRequest, textStatus, errorThrown) { // typically only one of textStatus or errorThrown // will have info this; // the options for this ajax request } 

    Из документа :

    Ошибка : функция, вызываемая при сбое запроса. Функция передается по трем аргументам: объект XMLHttpRequest, строка, описывающая тип возникшей ошибки и необязательный объект исключения, если это произошло. Возможными значениями для второго аргумента (кроме нуля) являются «тайм-аут», «ошибка», «немодифицированный» и «parsererror». Это событие Ajax

    Так, например:

      $.ajax({ type: "GET", url: "keepalive.php", success: function(msg){ alert("Connection active!") }, error: function(XMLHttpRequest, textStatus, errorThrown) { if(textStatus == 'timeout') { alert('Connection seems dead!'); } } }); 

    Я должен был создать веб-приложение (основанное на ajax) для клиента, который много работает со школами, в этих школах часто бывает плохое подключение к интернету. Я использую эту простую функцию, чтобы определить, есть ли соединение, работает очень хорошо!

    Я использую CodeIgniter и JQuery:

      function checkOnline(){ setTimeout("doOnlineCheck()", 20000); } function doOnlineCheck(){ var submitURL = $("#base_path").val() + "index.php/menu/online";//if the server can be reached it returns 1, other wise it times out $.ajax({ url : submitURL , type : 'post' , dataType: 'msg' , timeout : 5000 , success : function(msg){ if(msg==1){ $("#online").addClass("online"); $("#online").removeClass("offline"); }else{ $("#online").addClass("offline"); $("#online").removeClass("online"); } checkOnline(); } , error : function(){ $("#online").addClass("offline"); $("#online").removeClass("online"); checkOnline(); } }); } 

    вызов ajax в ваш домен – это самый простой способ определить, находитесь ли вы в автономном режиме

     $.ajax({ type: "HEAD", url: document.location.pathname + "?param=" + new Date(), error: function() { return false; }, success: function() { return true; } }); 

    это просто дать вам концепцию, ее нужно улучшить, проверить коды возврата http и т. д.

    Я думаю, что это очень простой способ.

     var x = confirm("Are you sure you want to submit?"); if(x){ if(navigator.onLine == true) { return true; } else { alert('Internet connection is lost'); return false; } } else { return false; } 

    Я искал решение на стороне клиента, чтобы определить, был ли интернет отключен или мой сервер был отключен. Другие решения, которые я нашел, всегда, казалось, зависели от стороннего файла сценария или изображения, что для меня не показалось, что он выдерживает испытание временем. Внешний хостинг-сценарий или изображение могут измениться в будущем и привести к сбою кода обнаружения.

    Я нашел способ обнаружить его, ища xhrStatus с кодом 404. Кроме того, я использую JSONP для обхода ограничения CORS. Код состояния, отличный от 404, показывает, что интернет-соединение не работает.

     $.ajax({ url: 'https://www.bing.com/aJyfYidjSlA' + new Date().getTime() + '.html', dataType: 'jsonp', timeout: 5000, error: function(xhr) { if (xhr.status == 404) { //internet connection working } else { //internet is down (xhr.status == 0) } } }); 

    Очень интересный скрипт, который много повторяет:

    http://www.codeproject.com/KB/scripting/InternetConnectionTest.aspx

    Это очень полезно, и поскольку он основан на Ajax, является асинхронным, поэтому вы можете проверить, подключен ли Интернет, не выходя из исходной страницы. Используя это с помощью таймера, вы также можете иметь компонент на странице, проверяющий каждые n минут.

    Мой путь.

         Am I online? 

    Есть два ответа для двух разных сенариев: –

    1. Если вы используете JavaScript на веб-сайте (т. Е. Или любую внешнюю часть) Самый простой способ сделать это:

       

      The Navigator Object

      The onLine property returns true if the browser is online:

    2. Но если вы используете js на стороне сервера (т. Е. Узел и т. Д.), Вы можете определить, что соединение потеряно, сделав неудачные запросы XHR.

      Стандартный подход заключается в повторном запросе запроса несколько раз. Если он не проходит, сообщите об этом пользователю, чтобы проверить соединение и изящно выйти из строя.

    запрос заголовка в запросе

     $.ajax({ url: /your_url, type: "POST or GET", data: your_data, success: function(result){ //do stuff }, error: function(xhr, status, error) { //detect if user is online and avoid the use of async $.ajax({ type: "HEAD", url: document.location.pathname, error: function() { //user is offline, do stuff console.log("you are offline"); } }); } }); 

    Вот fragment вспомогательной утилиты, которую у меня есть. Это javascript с именами:

     network: function() { var state = navigator.onLine ? "online" : "offline"; return state; } 

    Вы должны использовать это с обнаружением метода, иначе сработайте «альтернативный» способ сделать это. Время быстро приближается, когда это будет все, что необходимо. Другими методами являются хаки.

    Interesting Posts

    Как предотвратить проверку кода проверки орфографии в MS Office?

    Как превратить мой нетбук Linux в WiFi AP

    Установите вино на RHEL с Yum

    Можно ли использовать сканер, подключенный к другому компьютеру на моем компьютере?

    Windows: «Эта операция была отменена из-за ограничений, действующих на этом компьютере. Пожалуйста, обратитесь к системному администратору."

    Форматировать разблокированные ячейки с VBA в защищенном листе, но не заблокированные ячейки

    Установка Android при сбое устройства

    Нет клавиши меню клавиатуры Windows, альтернативы?

    Bootstrap – как настроить фиксированную ширину для ?

    Можно ли получить доступ к памяти локальной переменной за пределами ее объема?

    Избранные исчезли в окнах 8

    Как создать сопоставление «многие-ко-многим» в Entity Framework?

    Есть ли способ заставить все ссылочные сборки загружаться в домен приложения?

    Разница между chmod 777 и chmod 007

    Как циклически перебирать каталог для удаления файлов с определенными расширениями

    Давайте будем гением компьютера.