navigator.onLine仅反映系统级物理连接状态,非真实网络可达性;它返回布尔值表示接口启用情况,需配合事件监听、请求拦截和探测请求提升健壮性。

可以,但要注意它反映的是系统级连接状态,不是真实可达性。navigator.onLine 是 HTML5 提供的轻量级检测方式,适合做快速响应和用户体验优化,比如禁用按钮、提示离线、暂停轮询等。
监听 online/offline 事件
浏览器在系统报告网络状态变化时,会触发 online 和 offline 全局事件。你只需绑定监听器即可捕获切换:
- 用
window.addEventListener('online', handler)捕获恢复联网的瞬间 - 用
window.addEventListener('offline', handler)捕获断开连接的时刻 - 这两个事件不冒泡,也不可取消,建议在页面初始化时注册,避免遗漏首次状态
主动检查当前状态
事件只告诉你“变了”,但加载时你得知道“现在是什么”。直接读取 navigator.onLine 就行:
- 它返回布尔值:
true表示系统认为有网络接口(如 Wi-Fi、以太网已启用)false 表示系统确认无任何可用网络接口 - 注意:连着没外网的 Wi-Fi(比如酒店登录页、公司内网)也会返回
true,因为它不发请求验证连通性 - 典型用法:
if (!navigator.onLine) { showOfflineTip(); }
配合请求拦截提升健壮性
仅靠 onLine 不足以判断 API 是否真能通。实际项目中建议组合使用:
- 在请求发起前先检查
navigator.onLine,提前拒绝明显无效请求 - 在网络事件触发时,清空待发队列或标记为“暂存”,等 online 后重试
- 对关键请求(如表单提交),即使 onLine 为 true,也应设置合理 timeout,并在 catch 中区分是超时还是真实报错
局限性必须清楚
navigator.onLine 的本质是操作系统上报的“物理连接”状态,不是网络可达性检测:
- 它不会 ping 服务器,也不会尝试建立 HTTPS 连接
- 手机开了飞行模式 → 返回
false;连了热点但路由器没拨号 → 仍可能返回true - 若需更准判断(比如是否能访问你的域名),需额外发起轻量探测请求(如 GET /health 或 HEAD /favicon.ico)


















