美文网首页
离线检测及用户网络信息监听

离线检测及用户网络信息监听

作者: 涅槃快乐是金 | 来源:发表于2022-04-05 22:43 被阅读0次

需求场景

有时需要监听网络状态变化,从而通知用户注意,或根据网络状态程序内部做某些逻辑处理。也常常见到,在网络掉线或网络状态较差,会提示用户网络掉线注意修复或退出高清视频切换清晰度的场景,那么这样的需求,在web前端可以通过navigator.onLine和navigator.connection结合监听online、offline事件实现。

Navigator.onLine 属性

onLine 属性是一个只读的布尔值,声明了系统是否处于脱机模式,如果系统属于脱机状态,则返回 false,否则返回 true。

navigator.onLine属性之外,为了更好地确定网络是否可用,HTML5还定义了两个事件:onlineoffline。当网络从离线变为在线或者从在线变为离线时,分别触发这两个事件。这两个事件在window对象上触发。

window.addEventListener('offline', function(e) { console.log('offline'); });

window.addEventListener('online', function(e) { console.log('online'); });

为了检测应用是否离线,在页面加载后,最好先通过navigator.onLine取得初始的状态。然后,就是通过上述两个事件来确定网络连接状态是否变化。当上述事件触发时,navigator.onLine属性的值也会改变,不过必须要手工轮询这个属性才能检测到网络状态的变化。

navigator.connection

Navigator.connection 是只读的,提供一个NetworkInformation对象来获取设备的网络连接信息。包括:downlink(网络下行速度)、 effectiveType(网络类型)、onchange(有值代表网络状态变更)、rtt(估算的往返时间)、saveData(打开/请求数据保护模式)

console.log(navigator.connection);
NetworkInformation :{
  downlink: 0.65,
  effectiveType: "4g",
  onchange: null,
  rtt: 250,
  saveData: false
}

可以通过检测用户网路变化提示用户做不同操作

// 通过navigator.connection获取当前网络状态,可对connection进行监听,从而及时获取网络状态的变更
function getNetworkConnectionChange () {
  // connection 的兼容性较低
  const connection = navigator.connection || navigator.webkitConnection || navigator.mozConnection
  console.log('网络状态:' + connection.effectiveType)

  // 对connection变更监听
  connection.addEventListener('change', () => {
    // connection.effectiveType返回的是具体的网络状态:4g/3g/2g
    console.log('网络状态:' + connection.effectiveType)
  })
}

注意事项:

navigator.onlinenavigator.connection浏览器兼容性如下,可以看到connection的兼容性较低,实际开发应当谨慎使用。

相关文章

网友评论

      本文标题:离线检测及用户网络信息监听

      本文链接:https://www.haomeiwen.com/subject/aoylsrtx.html