上一篇
html5检查网络
- 行业动态
- 2025-05-06
- 2266
HTML5可通过navigator.onLine属性检测网络状态,true为在线,false为离线,配合window.addEventListener(‘online/offline’)监听网络切换,触发回调
HTML5网络状态检测核心方法
Navigator.onLine属性
- 作用:检测设备当前网络连接状态
- 返回值:布尔值(true表示在线,false表示离线)
- 特点:
- 只判断设备是否连接到网络
- 无法区分WiFi/移动数据等具体连接类型
- 部分浏览器存在延迟更新问题
Online/Offline事件
- 触发条件:
online
事件:设备从离线切换到在线offline
事件:设备从在线切换到离线
- 典型应用场景:
- 自动保存未提交的表单数据
- 暂停视频播放
- 显示离线提示界面
Network Information API(实验性)
属性 | 说明 | 浏览器支持 |
---|---|---|
type | 连接类型(wifi/4g等) | Chrome 61+, Firefox 59+ |
effectiveType | 有效连接类型(降速后的类型) | |
downlink | 下行带宽(Mbps) | |
rtt | 网络往返时延(毫秒) | |
isConnected | 是否建立网络连接 |
网络状态检测方案对比表
检测方式 | 准确性 | 实时性 | 兼容性 | 适用场景 |
---|---|---|---|---|
navigator.onLine | IE10+ | 基础在线状态判断 | ||
online/offline事件 | IE10+ | 状态变化响应 | ||
Network Info API | 现代浏览器 | 高级网络质量检测 |
常见问题与解决方案
Q1:如何实时监控网络质量变化?
A:结合online
事件和Network Information API,可构建多维度监控:
const updateNetworkStatus = () => { if (navigator.onLine) { const connection = navigator.connection || { type: 'unknown' }; console.log(`连接类型:${connection.type}`); console.log(`下行速度:${connection.downlink} Mbps`); } else { console.log('设备已离线'); } }; window.addEventListener('online', updateNetworkStatus); window.addEventListener('offline', updateNetworkStatus); window.addEventListener('resize', updateNetworkStatus); // 部分浏览器需触发更新
Q2:如何处理网络不稳定导致的请求失败?
A:采用指数退避算法重试机制:
function requestWithRetry(url, options = {}, retries = 3) { return fetch(url, options) .catch(err => { if (retries > 0 && navigator.onLine) { const delay = Math.pow(2, 3 retries) 1000; // 1s, 2s, 4s return new Promise(resolve => setTimeout(() => requestWithRetry(url, options, retries 1).then(resolve), delay) ); } else { throw err; }