Проверьте, существует ли Интернет-соединение с JavaScript? [дубликат]

209
задан Prakash Pazhanisamy 2 October 2017 в 21:52
поделиться

4 ответа

Лучшим вариантом для вашего конкретного случая может быть:

Прямо перед закрытым тегом :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

Это, вероятно, самый простой способ, учитывая, что ваша проблема связана с jQuery.

Если вам нужно более надежное решение, вы можете попробовать:

var online = navigator.onLine;

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

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

Я бы не рекомендовал делать запрос XHR в чью-либо службу, даже в google.com, если на то пошло. Делать запрос к вашему серверу, или не делать вообще.

Что значит быть «онлайн»?

Кажется, есть некоторая путаница в том, что означает «быть онлайн». Учтите, что Интернет - это набор сетей, однако иногда вы используете VPN, не имея доступа к Интернету «в целом» или всемирной паутине. Часто компании имеют свои собственные сети, которые имеют ограниченное соединение с другими внешними сетями, поэтому вас можно рассматривать как «онлайн».Находиться в сети означает только то, что вы подключены к сети a , а не доступность или доступность служб, к которым вы пытаетесь подключиться.

Чтобы определить, доступен ли хост из вашей сети, вы можете сделать следующее:

function hostReachable() {

  // Handle IE and more capable browsers
  var xhr = new ( window.ActiveXObject || XMLHttpRequest )( "Microsoft.XMLHTTP" );

  // Open new request as a HEAD to the root hostname with a random param to bust the cache
  xhr.open( "HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false );

  // Issue request and handle response
  try {
    xhr.send();
    return ( xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304) );
  } catch (error) {
    return false;
  }

}

Вы также можете найти Gist здесь: https://gist.github.com/jpsilvashy/5725579

Подробная информация о локальной реализации

Некоторые люди прокомментировали: «Мне всегда возвращают ложь». Это потому, что вы, вероятно, тестируете его на своем локальном сервере. К какому бы серверу вы ни отправляли запрос, вам необходимо иметь возможность отвечать на запрос HEAD, который, конечно, можно изменить на GET, если вы хотите.

261
ответ дан 23 November 2019 в 04:39
поделиться

5 лет спустя-версия:

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

Один из них - https://github.com/hubspot/offline . Он проверяет возможность подключения предопределенного URI, по умолчанию вашего значка. Он автоматически определяет, когда подключение пользователя было восстановлено, и предоставляет удобные события, такие как вверх и вниз , к которым вы можете привязаться, чтобы обновить свой пользовательский интерфейс.

14
ответ дан 23 November 2019 в 04:39
поделиться

Вы можете попробовать отправить XHR-запросы несколько раз, и если вы получите ошибки, это будет означать, что есть проблема с интернет-соединением.

Edit: Я нашел этот скрипт JQuery, который делает то, о чем вы просите, но я его не тестировал.

1
ответ дан 23 November 2019 в 04:39
поделиться

Отправка запросов XHR - это плохо, потому что может произойти сбой, если этот конкретный сервер не работает. Вместо этого используйте библиотеку API Google для загрузки их кэшированных версий jQuery.

Вы можете использовать API Google для выполнения обратного вызова после загрузки jQuery, и это будет проверять, успешно ли был загружен jQuery. Примерно такой код должен работать:

<script type="text/javascript">
    google.load("jquery");

    // Call this function when the page has been loaded
    function test_connection() {
        if($){
            //jQuery WAS loaded.
        } else {
            //jQuery failed to load.  Grab the local copy.
        }
    }
    google.setOnLoadCallback(test_connection);
</script>

Документацию по API Google можно найти здесь .

-4
ответ дан 23 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: