好的断网处理会让人很舒适:lol的断线重连,王者荣耀的断线重连 可以确保游戏的继续进行

坏的断网处理甚至不处理会出bug:比如我手上的项目就出了个bug 业务人员表示非常苦恼

网络问题一直是一个很值得关注的问题。

比如在慢网情况下,增加loading避免重复发请求,使用promise顺序处理请求的返回结果,或者是增加一些友好的上传进度提示等等。

那么大家有没有想过断网情况下该怎么做呢?比如说网络正常->断网->网络正常。

其实我一直也没想过,直到组里的测试测出一个断网导致的bug,让我意识到重度依赖网络请求的前端,在断网情况下可能会出现严重的bug。

因此我将在这里记录一下自己对系统断网情况下的处理,一方面避免bug产生,一方面保证用户及时在应用内知道网络已经断开连接

概览

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

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

断网处理项目实战

思路和效果

断网处理组件使用

断网处理组件详情

发现

参考资料

概览

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

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

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

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

你需要知道用户何时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)...

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

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

这两个事件会在浏览器在online mode和offline mode之间切换时,由页面的

发射出去。

事件会按照以下顺序冒泡: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会有兼容性的问题)

也可以通过标签注册事件

例子

复制代码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,连网给出提醒和遮罩:网络已连接。

断网处理组件使用

:offlineTitle = "断网处理标题"

:desc="断网处理描述"

:onlineTitle="连网提醒"

>

复制代码

断网处理组件详情

{{offlineTitle}}

{{desc}}

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);

},

},

};

.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;

h2 {

color: rgba(0, 0, 0, 0.8);

}

p {

margin-top: 20px;

color: red;

font-weight: bold;

}

}

复制代码

发现

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的避免屏闪

参考资料:

期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:

SegmentFault技术圈:ES新规范语法糖

前端开发QQ群:660634678

微信公众号: 生活在浏览器里的我们 / excellent_developers

努力成为优秀前端工程师!

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[如何处理浏览器的断网情况?]http://www.zyiz.net/tech/detail-122993.html

java 断网处理_如何处理浏览器的断网情况?相关推荐

  1. 柠檬浏览器 for linux,柠檬浏览器app官网下载_柠檬浏览器最新官网下载_18183软件下载...

    找柠檬浏览器官网下载就来18183! 柠檬浏览器官网下载攻略教程: 头疼找不到有趣的软件?下载柠檬浏览器官网下载吧,享受别样的乐趣. 网址访问:给你流畅的上网体验,即点即开,不用等到花儿都谢了 网址导 ...

  2. 如何处理浏览器的断网情况?

    好的断网处理会让人很舒适:lol的断线重连,王者荣耀的断线重连 可以确保游戏的继续进行 坏的断网处理甚至不处理会出bug:比如我手上的项目就出了个bug 业务人员表示非常苦恼 网络问题一直是一个很值得 ...

  3. java旅游网项目_基于jsp的旅游网-JavaEE实现旅游网 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的旅游网, 该项目可用各类java课程设计大作业中, 旅游网的系统架构分为前后台两部分, 最终实现在线上进行旅游网各 ...

  4. 关于travis scott的网名_小仙女可爱单纯的网名

    时间:2020-11-04 09:23:38   关键词: 可爱网名,可爱网名单纯 德龙 男生适合大气阳刚的网名,而女生则更加适合可爱又萌的网名.若你也在网上搜索女孩单纯且可爱的网名,那么一定要看看以 ...

  5. python输入名字配对情侣网名_输入名字得情侣网名

    设计是 把一种设想 通过合理的规划 周密的计划 通过各种感觉形式传达出来的过程.人类通过劳动改造世界,创造文明,创造物质财富和精神财富,而最基础.最主要的创造活动是造物.设计便是造物活动进行预先的计划 ...

  6. python编程输入名字配对情侣网名_输入名字制作情侣网名,如何制作甜蜜的情侣网名?...

    起一个时尚的网名是每个年轻人都梦寐以求的事,想要让自己和对象的网名都能够好听,那是非常困难的.我们都知道情侣要非常匹配,才能是高分的情侣网名,并且还需要符合现代的审美,下面是输入名字制作情侣网名,希望 ...

  7. python输入名字配对情侣网名_输入姓名配对情侣网名

    输入姓名配对情侣网名 输入名字自动取qq网名 情侣网名(带对方名字) 输入名字取网名免费 输名字查询网名 ꦿོ网名生成器 输名字查询网名 根据名字取快手昵称 加名字的网名 1.肆无↗忌惮魡伤迶多鬺 2 ...

  8. minecraft java版皮肤查看_我的世界官网针对Minecraft Java版玩家皮肤的更新

    我的世界官网针对Minecraft Java版玩家皮肤的更新!你可能昨天已经在其他网站了解到了一些和下载Minecraft Java版皮肤有关的新闻,这些新闻指出,一个Minecraft Java版皮 ...

  9. 携程java工资待遇怎么样_【携程旅行网工资|携程旅行网待遇怎么样】-看准网

    2021届校招面试分享 -- 持续更新中携程  内推-交互设计   等待二面中一面  8/17  持续约45分钟问题1.自我介绍(本人最后还补充了一句喜欢c端设计,被反问为什么喜欢,觉得b端和c端设计 ...

最新文章

  1. Java字节码浅析(—)
  2. Https 客户端与服务器交互过程梳理(转)
  3. php smarty 序号,php – Smarty缩进和代码格式
  4. Primefaces dataTable设置某个cell的样式问题
  5. 肉体之爱的解释圣经_可以解释的AI简介,以及我们为什么需要它
  6. rtsp视频解码-分析-转发http-flv ws-flv webrtc
  7. linux ssh 查看vg,linux SSH证书登录
  8. 将向量附加到向量[重复]
  9. LeetCode 10.正则表达式匹配(动态规划)
  10. 为什么qt这么强大没人使用_浅析--懒懒口袋为什么得到这么多人的信任和使用?...
  11. eclipse编android计算机,在eclipse中制作的android 计算器程序
  12. [Java反序列化]AspectJWeaver反序列化
  13. #Android Studio# 模拟器开发者模式
  14. COJ 0359 xjr考考你数据结构(根号2)线段树区间增加
  15. python基础(中)
  16. 【linux/shell】Centos7环境搭建、服务器搭建(脚本)
  17. 获取店铺商品详情和订单详情
  18. DELL H61刷BIOS开启AHCI
  19. 交换机的端口工作模式一般可以分为三种:Access,Multi,Trunk。
  20. 【干货】java课程实战培训

热门文章

  1. taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,店铺订单明文接口,店铺订单解密接口,店铺订单消息推送接口
  2. 在线播放ppt html5,强大的HTML5幻灯片系统:H5Slides
  3. 20220712 初识JS
  4. IAAS基于开源openstack框架搭建云计算平台和各组件基础搭建内容包括mysql、keyston、Glance、Nova、Neutron、Dashboard、Heat、Trove等
  5. C语言实现统计整数出现次数
  6. (Note)Python 统计列表中各元素出现的次数
  7. ClamWin杀毒程序的改写
  8. 设备在升级界面文字或图像方向偏转问题修改方案(RK3399方案)
  9. 我只是一名创业者,不是成功者
  10. 度度熊与邪恶大魔王 (百度之星之资格赛)