Проверить, подключен ли пользователь к Интернету
Доброго времени суток! Набросал код, который должен проверять каждые 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, время: 11:53. |