Артём Мáлков

Проверка доступности Интернета на JavaScript

26 июл3 комм

Все мы с вами пользуемся Интернетом. На компьютере или на мобильном устройстве – неважно, во всех них могут быть перебои в работе. Закончились деньги или просто отключился свет – при взаимодействии в таких условиях с вашим сайтом важные не сохраненные данные могут пропасть.

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

Модуль формируется из трех составляющих. Это верстка:

<div class="m_inCheck_main">

	<div class="m_inCheck" style="opacity: 0;">
 
		<div class="m_inCheck_padding">

			<div class="m_inCheck_title m_inCheck_all_text">У Вас остуствует Интернет!</div>
			<div class="m_inCheck_text m_inCheck_all_text">Дальнейшая работа с сайтом невозможна ...</div>

		</div>
    
		<div class="m_inCheck_hide" title="Скрыть уведомление" onclick='document.getElementsByClassName("m_inCheck")[0].classList.remove("m_inCheck_show");'></div>
  
	</div>
  
</div>

Оформление (стиль):

/** © 2018 Artem Malcov | https://www.pandoge.com/moduli-i-skripty/proverka-dostupnosti-interneta-na-javascript **/

.m_inCheck_main * {
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.m_inCheck_main *:before, .m_inCheck_main *:after {
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.m_inCheck {
	position: fixed;
	right: 15px;
	bottom: 15px;
	background: #d31c0c url("/img/bg.png");
	border-radius: 4px;
	width: 360px;
	height: 60px;
	border-top: 1px solid #ec3515;
	box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
	font-family: arial;
	-webkit-transform: translateY(20%);
	-moz-transform: translateY(20%);
	-ms-transform: translateY(20%);
	transform: translateY(20%);
	-webkit-transition: all 0.2s;
	-moz-transition: all 0.2s;
	transition: all 0.2s;
	visibility: hidden;
}

.m_inCheck_title {
	font-size: 17px;
}

.m_inCheck_text {
	font-size: 13px;
	margin: -1px 0 0 0;
}

.m_inCheck_all_text {
	text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
	color: #fff;
}

.m_inCheck_padding {
	background: url("/img/info.png") no-repeat 14px center;
	background-size: 34px 34px;
	height: 59px;
	padding: 10px 0 0 62px;
}

.m_inCheck_hide {
	position: absolute;
	top: 5px;
	right: 5px;
	width: 15px;
	height: 15px;
	border-radius: 4px;
	background: #a41d0a url("/img/close.png") no-repeat center center;
	transition: .2s;
}

.m_inCheck_hide:hover {
	cursor: pointer;
	background: #961800 url("/img/close.png") no-repeat center center;
	transition: .2s;
}

.m_inCheck_show {
	-webkit-transform: translateY(0);
	-moz-transform: translateY(0);
	-ms-transform: translateY(0);
	transform: translateY(0);
	opacity: 1 !important;
	visibility: visible;
	z-index: 9999999;
}

И сам скрипт:

<script>

	setInterval(function() {
		
		var request_inCheck = new XMLHttpRequest();

		request_inCheck.open("GET", window.location.pathname, true);
		request_inCheck.timeout = 2000;

		request_inCheck.addEventListener("readystatechange", function() {
			
			if(request_inCheck.status == 0) {

				document.getElementsByClassName("m_inCheck")[0].classList.add("m_inCheck_show");

			} else {

				document.getElementsByClassName("m_inCheck")[0].classList.remove("m_inCheck_show");

			}
			
		});

		request_inCheck.send();
		
	}, 5000); // Проверка каждые 5 секунд

</script>

Визуально это все выглядит так:

Проверка доступности Интернета на JavaScript

Надеемся, что в свое время мы не зря занялись его разработкой, и он найдет свое место в уголке вашего сайта.

Файл
Размер
Ссылка
img.zip
13,35 Kb
Скачать с сервера
Рекомендуем к просмотру
Новый раздел на сайте – «Магазин расширений»
Блог
Как вставить HTML, CSS и JS в PHP-код?
Статьи и советы
Удаляем все комментарии, ожидающие проверки, в три клика на DLE
Хаки
3
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    1067
      •  Команда Pandoge
    18 окт в 17:36

    Andrews32, поправил немного скрипт. Пробуйте.

    • 1
    766
      •  Гости
    17 окт в 17:25

    Автор, спасибо за готовое решение! Попробовал. В целом всё работает, НО! Добавил для удобства отладки команды

    console.log("internet_conn_status[offline]");

    и

    console.log("internet_conn_status[online]");

    соответственно. Когда сеть есть, видно, что првоерка идёт каждые N секунд. Когда она пропадает, есть довольно большая задержка (вплоть до полминуты), предже чем появится div с сообщением. По всей видимости, нужно в функцию добавить ещё какой-то таймаут ожидания ответа от window.location.pathname.

    Мои знания Javascript не позволяют это сделать. Надежда, как всегда, на вас))

    • 1
    766
      •  Гости
    3 окт в 22:10

    Хм.. как же navigator.onLine ?

Подняться наверх
«Pandoge» - помощник вебмастера