我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么处理浏览器的断网情况

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么处理浏览器的断网情况

本篇内容主要讲解“怎么处理浏览器的断网情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么处理浏览器的断网情况”吧!

概览

为了构建一个 “断网(offline)可用”的web应用,你需要知道应用在什么时候是断网(offline)的。

不仅仅要知道什么时候断网,更要知道什么时候网络恢复正常(online)。

可以分解陈本下面两种常见情况:

  1. 你需要知道用户何时online,这样你可以与服务器之间re-sync(重新同步)。

  2. 你需要知道用户何时offline,这样你可以将你未发出的请求过一段时间再向服务器发出。

通常可以通过online/offline事件去做这个事情。

用于检测浏览器是否连网的navigator.onLine

navigator.onLine

  • true online

  • false offline

可以通过network的online选项切换为offline,打印navigator.onLine验证。

当浏览器不能连接到网络时,这个属性会更新。规范中是这样定义的:

The navigator.onLine attribute must return false if the user agent will not contact the network when the user follows links or when a script requests a remote page (or knows that such an attempt would fail)...

用于检测网络状况的navigator.connection

在youtube观看视频时,自动检测网络状况切换清晰度是如何做到的呢?

国内的视频网站也会给出一个切换网络的提醒,该如何去检测呢?

也就是说,有没有办法检测网络状况?判断当前网络是流畅,拥堵,繁忙呢?

可以通过navigator.connection,属性包括effectiveType,rtt,downlink和变更网络事件change。继承自NetworkInformation API。

navigator.connection

online状态下运行console.log(navigator.connection);

{      onchange: null,      effectiveType: "4g",      rtt: 50,      downlink: 2,      saveData: false  }

通过navigator.connection可以判断出online,fast 3g,slow 3g,和offline,这四种状态下的effectiveType分别为4g,3g,2g,4g(rtt,downlink均为0)。

rtt和downlink是什么?NetworkInformation是什么?

这是两个反映网络状况的参数,比type更加具象且更能反映当前网络的真实情况。

常见网络情况rtt和downlink表

网络状况rtt(ms)downlink(Mbit/s)
online1002.2
fast 3g6001.55
slow 3g21500.4
offline00

注意:rtt和downlink不是定值,而是实时变化的。online时,可能它现在是rtt 100ms,2.2Mb/s,下一秒就变成125ms,2.1Mb/s了。

rtt

  • 连接预估往返时间

  • 单位为ms

  • 值为四舍五入到25毫秒的最接近倍数(就是说这个值x%25===0,可以观察常见网络情况rtt和downlink表)

  • 值越小网速越快。类似ping的time吧

  • 在Web Worker中可用

downlink

  • 带宽预估值

  • 单位为Mbit/s(注意是Mbit,不是MByte。)

  • 值也是四舍五入到最接近的25比特/秒的倍数(就是说这个值x%25===0,可以观察常见网络情况rtt和downlink表)

  • 一般越宽速度越快,也就是,信道上可以传输更多数。(吐槽一句,学过的通信原理还蛮有用。)

  • 值越大网速越快。类似高速一般比国道宽。

  • 在Web Worker中可用

草案(Draft)阶段NetworkInformation API

无论是rtt,还是downlink,都是这个草案中的内容。

除此之外还有downlinkMax,saveData,type等属性。

更多资料可以查询:NetworkInformation

如何检测网络变化去做出响应呢?

NetworkInformation继承自EventTarget,可以通过监听change事件去做一些响应。

例如可以获得网络状况的变更?

var connection = navigator.connection;  var type = connection.effectiveType;  function updateConnectionStatus() {    console.log("网络状况从 " + type + " 切换至" + connection.effectiveType);    type = connection.effectiveType;  }  connection.addEventListener('change', updateConnectionStatus);

监听变更之后,我们可以弹一个Modal提醒用户,也可以出一个Notice通知用户网络有变化,或者可以更高级得去自动切换清晰度(这个应该比较难)。

引出NetworkInformation的概念,只是想起一个抛砖引玉的作用。这种细粒度的网络状况检测,可以结合具体需求去具体实现。

在这篇博文中,我们只处理断网和连网两种情况,下面来看断网事件"offline"和连网事件"online"。

断网事件"offline"和连网事件"online"

浏览器有两个事件:"online" 和 "offline".

这两个事件会在浏览器在online mode和offline mode之间切换时,由页面的<body>发射出去。

事件会按照以下顺序冒泡:document.body -> document -> window。

事件是不能去取消的(开发者在代码上不能手动变为online或者offline,开发时使用开发者工具可以)。

注册上下线事件的几种方式

最最建议window+addEventListener的组合。

  • 通过window或document或document.body和addEventListener(Chrome80仅window有效)

  • 为document或document.body的.ononline或.onoffline属性设置一个js函数。(注意,使用window.ononline和window.onoffline会有兼容性的问题)

  • 也可以通过标签注册事件<body ononline="onlineCb" onoffline="offlineCb"></body>

例子

怎么处理浏览器的断网情况

怎么处理浏览器的断网情况

<div id="status"></div>  <div id="log"></div>
window.addEventListener('load', function() {    var status = document.getElementById("status");    var log = document.getElementById("log");    function updateOnlineStatus(event) {      var condition = navigator.onLine ? "online" : "offline";      status.innerHTML = condition.toUpperCase();      log.insertAdjacentHTML("beforeend", "Event: " + event.type + "; Status: " + condition);    }    window.addEventListener('online',  updateOnlineStatus);    window.addEventListener('offline', updateOnlineStatus);  });

其中insertAdjacentHTML是在标签节点的邻近位置插入,可以查阅:DOM进阶之insertAdjacentHTML

断网处理项目实战

基于vue以及iView的Spin,Notice组件封装出离线处理组件,在需要到的页面引入即可。

思路和效果

只要做到断网提醒+遮罩,上线提醒-遮罩即可。

  • 监听offline,断网给出提醒和遮罩:网络已断开,请检查网络连接。

  • 监听online,连网给出提醒和遮罩:网络已连接。

怎么处理浏览器的断网情况

断网处理组件使用

<OfflineHandle      :offlineTitle = "断网处理标题"      :desc="断网处理描述"      :onlineTitle="连网提醒"  >  </OfflineHandle>

断网处理组件详情

<!--OfflineHandle.vue-->  <template>    <div v-if="spin" class="offline-mark">      <Spin size="large" fix>        <h3>{{offlineTitle}}</h3>        <p>{{desc}}</p>      </Spin>    </div>  </template>  <script>  export default {    name: 'offline-handle',    props: {      offlineTitle: {        type: String,        default: '网络已断开,请检查网络连接。',      },      onlineTitle: {        type: String,        default: '网络已连接',      },      desc: {        type: String,        default: '',      },      duration: {        type: Number,        default: 4.5,      },    },    data() {      return {        spin: false,      };    },    mounted() {      window.addEventListener('offline', this.eventHandle);      window.addEventListener('online', this.eventHandle);    },    beforeDestroy() {      window.removeEventListener('offline', this.eventHandle);      window.removeEventListener('online', this.eventHandle);    },    methods: {      eventHandle(event) {        const type = event.type === 'offline' ? 'error' : 'success';        this.$Notice[type]({          title: type === 'error' ? this.offlineTitle : this.onlineTitle,          desc: type === 'error' ? this.desc : '',          duration: this.duration,        });        setTimeout(() => {          this.spin = event.type === 'offline';        }, 1500);      },    },  };  </script>  <style lang="scss" scoped>  .offline-mark {    position: fixed;    top: 0;    left: 0;    right: 0;    bottom: 0;    background-color: #ccc;    z-index: 9999;    transition: position 2s;  }  /deep/.ivu-spin-fix {    text-align: left;    font-size: 20px;    h3 {      color: rgba(0, 0, 0, 0.8);    }    p {      margin-top: 20px;      color: red;      font-weight: bold;    }  }  </style>

发现

  • offline和online事件:window有效,document和document.body设置无效

手上的项目只运行在Chrome浏览器,只有为window设置offline和online才生效。

运行环境:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36

  • 为position增加2s的transition的避免屏闪 

到此,相信大家对“怎么处理浏览器的断网情况”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么处理浏览器的断网情况

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

整理CSS3新功能的浏览器兼容情况

编程学习网:考虑到国内使用Windows XP的用户还是比较多,而在这个操作系统下,微软自带的IE浏览器只能升到8版本,然而IE8先于CSS3诞生,所以难免有不少新功能无法直接兼容CSS3。
整理CSS3新功能的浏览器兼容情况
2024-04-23

win10系统IE打开的默认情况是搜狗浏览器怎么办

win10系统IE打开的默认情况是搜狗浏览器怎么办?最近,许多朋友经常问小边关于win10系统默认浏览器被软件篡改,事实上,解决方案也很简单,只需要简单的操作就可以修改,如果你介意篡改你的浏览器的操作!建议直接卸载一个软件!方法1.360浏
2023-07-19

如何处理服务器上客户端断开连接的情况

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《如何处理服务器上客户端断开连接的情况》,聊聊,希望可以帮助到正在努力赚钱的你。问题内
如何处理服务器上客户端断开连接的情况
2024-04-05

使用Java怎么判断浏览器的版本

使用Java怎么判断浏览器的版本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。public static void main(String[] args) {String
2023-05-30

怎么处理php输出excel乱码的情况

本篇内容主要讲解“怎么处理php输出excel乱码的情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么处理php输出excel乱码的情况”吧!php输出excel乱码的解决办法:首先打开相应
2023-06-07

PHP怎么处理文件不存在的情况

这篇文章主要讲解了“PHP怎么处理文件不存在的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP怎么处理文件不存在的情况”吧!当您使用PHP访问文件系统时,有几种方法可以检查文件是否存
2023-07-05

遇到Discuz打不开的情况怎么处理

遇到 Discuz 打不开的情况怎么处理,需要具体代码示例当用户在使用 Discuz 论坛时,突然遇到无法打开网页的情况,可能会因为多种原因导致,比如服务器故障、网络连接问题、程序错误等。在遇到这种情况时,可以通过以下方法来排查和处理问题
遇到Discuz打不开的情况怎么处理
2024-03-02

PHP怎么判断当前使用的浏览器类型

这篇文章主要介绍“PHP怎么判断当前使用的浏览器类型”,在日常操作中,相信很多人在PHP怎么判断当前使用的浏览器类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么判断当前使用的浏览器类型”的疑惑有所
2023-06-04

怎么在判断使用的浏览器是否支持css3

怎么在判断使用的浏览器是否支持css3?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。CSS @supports规则:语法:@supports (rule)[op
2023-06-14

js关闭浏览器时退出账号怎么处理

这篇文章主要讲解了“js关闭浏览器时退出账号怎么处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js关闭浏览器时退出账号怎么处理”吧!经典做法众所周知,为了账户安全,用户未主动点击注销系统
2023-06-21

Nagios怎么处理被监控主机的不可达情况

当Nagios监测到被监控主机不可达时,它会触发一个报警,通知管理员或运维团队。管理员可以根据具体情况采取以下措施:检查网络连接:首先确认被监控主机的网络连接是否正常,可以通过ping命令测试网络连通性。检查主机状态:检查被监控主机的运行状
Nagios怎么处理被监控主机的不可达情况
2024-04-09

c语言strcpy怎么处理源字符串为空的情况

在C语言中,strcpy函数用于将一个字符串拷贝到另一个字符串中。如果源字符串为空,则直接将目标字符串置空。下面是处理源字符串为空的情况的示例代码:#include #include int mai
c语言strcpy怎么处理源字符串为空的情况
2024-03-02

云服务器的浏览器上不了网怎么解决

如果云服务器的浏览器无法上网,可以尝试以下解决方法:1. 检查网络连接:确保云服务器正常连接到互联网,可以通过ping命令测试服务器是否能够与外部网络通信。2. 检查DNS设置:如果云服务器的DNS设置不正确,可能导致无法访问网页。可以尝试
2023-08-18

云服务器的浏览器上不了网怎么解决

云服务器浏览器上不了网的解决方法检查网络连接、DNS、防火墙、代理设置、浏览器设置、系统更新、网络适配器驱动程序。如果问题仍然存在,请联系云服务提供商,提供错误消息和已采取的故障排除步骤。
云服务器的浏览器上不了网怎么解决
2024-04-11

怎么用批处理记录服务器远程终端3389登陆情况

小编给大家分享一下怎么用批处理记录服务器远程终端3389登陆情况,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果服务器有多个用户或查看是否有其他非法用户登录的时
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录