Проверить, подключен ли пользователь к Интернету
Доброго времени суток! Набросал код, который должен проверять каждые 3 секунды, в сети ли пользователь. Пока он проверяет бесконечное количество раз, подключены мы к Интернету или нет. (вернее, должен, но браузер тупит). Как сделать паузы между выполнением while, например, на 10 секунд?
<!DOCTYPE html>
<html>
<head>
<title>Internet Connection</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body onload="">
<script>
while (true) { setTimeout(checkState, 3000); }
function checkState() {
if(navigator.onLine) {
alert("Вы подключены к интернету!")
} else {
alert("Похоже, вы потеряли соединение с Интрнетом!")
}
}
</script>
</body>
</html>
|
Это не браузер тупит
Вы в бесконечном цикле посnоянно вызываете setTimeot не дожидаясь когда она закончится. За 3 сек она вызовется 100500 раз. Цитата:
|
Так попробуйте
<!DOCTYPE html>
<html>
<head>
<title>Internet Connection</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body onload="">
<script>
const testInet = async (ty=10000, tn=3000, n=25) =>{
const delay = (n) => {
return new Promise (res => {
let tm = setTimeout (() => res(tm), n);
})
}
const testNo = async (n) => {
while (n--) {
alert (`Проверяем связь. Осталось ${n} проверок `)
if(navigator.onLine) return true
await delay(tn)
}
return false
}
while (true) {
if(! navigator.onLine) {
alert ('Похоже, вы потеряли соединение с Интрнетом!')
let ans = await testNo(n)
if (!ans) {
alert ('Похоже, это навсегда!!!')
break;
}
alert ('Связь восстановлена!')
}
await delay(ty)
}
}
testInet(10000, 3000, 50);
</script>
</body>
</html>
Пока связь есть, проверяет каждые 10 сек. Когда связь потеряна начинает проверять каждые 3 сек, но не более 50 раз Сам не проверял. Что бы инет отключить провода выдергивать придется. |
ABitOfJS,
<!DOCTYPE html>
<html>
<head>
<title>Internet Connection</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>
document.addEventListener( "DOMContentLoaded" , function() {
const checkState = () => {
let text = navigator.onLine ? "Вы подключены к интернету!" : "Похоже, вы потеряли соединение с Интрнетом!"
attention.textContent = text;
setTimeout(checkState, 3000)
}
checkState()
});
</script>
</head>
<body>
<div id="attention"></div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 17:55. |