java 断网处理_如何处理浏览器的断网情况?
好的断网处理会让人很舒适: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 断网处理_如何处理浏览器的断网情况?相关推荐
- 柠檬浏览器 for linux,柠檬浏览器app官网下载_柠檬浏览器最新官网下载_18183软件下载...
找柠檬浏览器官网下载就来18183! 柠檬浏览器官网下载攻略教程: 头疼找不到有趣的软件?下载柠檬浏览器官网下载吧,享受别样的乐趣. 网址访问:给你流畅的上网体验,即点即开,不用等到花儿都谢了 网址导 ...
- 如何处理浏览器的断网情况?
好的断网处理会让人很舒适:lol的断线重连,王者荣耀的断线重连 可以确保游戏的继续进行 坏的断网处理甚至不处理会出bug:比如我手上的项目就出了个bug 业务人员表示非常苦恼 网络问题一直是一个很值得 ...
- java旅游网项目_基于jsp的旅游网-JavaEE实现旅游网 - java项目源码
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的旅游网, 该项目可用各类java课程设计大作业中, 旅游网的系统架构分为前后台两部分, 最终实现在线上进行旅游网各 ...
- 关于travis scott的网名_小仙女可爱单纯的网名
时间:2020-11-04 09:23:38 关键词: 可爱网名,可爱网名单纯 德龙 男生适合大气阳刚的网名,而女生则更加适合可爱又萌的网名.若你也在网上搜索女孩单纯且可爱的网名,那么一定要看看以 ...
- python输入名字配对情侣网名_输入名字得情侣网名
设计是 把一种设想 通过合理的规划 周密的计划 通过各种感觉形式传达出来的过程.人类通过劳动改造世界,创造文明,创造物质财富和精神财富,而最基础.最主要的创造活动是造物.设计便是造物活动进行预先的计划 ...
- python编程输入名字配对情侣网名_输入名字制作情侣网名,如何制作甜蜜的情侣网名?...
起一个时尚的网名是每个年轻人都梦寐以求的事,想要让自己和对象的网名都能够好听,那是非常困难的.我们都知道情侣要非常匹配,才能是高分的情侣网名,并且还需要符合现代的审美,下面是输入名字制作情侣网名,希望 ...
- python输入名字配对情侣网名_输入姓名配对情侣网名
输入姓名配对情侣网名 输入名字自动取qq网名 情侣网名(带对方名字) 输入名字取网名免费 输名字查询网名 ꦿོ网名生成器 输名字查询网名 根据名字取快手昵称 加名字的网名 1.肆无↗忌惮魡伤迶多鬺 2 ...
- minecraft java版皮肤查看_我的世界官网针对Minecraft Java版玩家皮肤的更新
我的世界官网针对Minecraft Java版玩家皮肤的更新!你可能昨天已经在其他网站了解到了一些和下载Minecraft Java版皮肤有关的新闻,这些新闻指出,一个Minecraft Java版皮 ...
- 携程java工资待遇怎么样_【携程旅行网工资|携程旅行网待遇怎么样】-看准网
2021届校招面试分享 -- 持续更新中携程 内推-交互设计 等待二面中一面 8/17 持续约45分钟问题1.自我介绍(本人最后还补充了一句喜欢c端设计,被反问为什么喜欢,觉得b端和c端设计 ...
最新文章
- Java字节码浅析(—)
- Https 客户端与服务器交互过程梳理(转)
- php smarty 序号,php – Smarty缩进和代码格式
- Primefaces dataTable设置某个cell的样式问题
- 肉体之爱的解释圣经_可以解释的AI简介,以及我们为什么需要它
- rtsp视频解码-分析-转发http-flv ws-flv webrtc
- linux ssh 查看vg,linux SSH证书登录
- 将向量附加到向量[重复]
- LeetCode 10.正则表达式匹配(动态规划)
- 为什么qt这么强大没人使用_浅析--懒懒口袋为什么得到这么多人的信任和使用?...
- eclipse编android计算机,在eclipse中制作的android 计算器程序
- [Java反序列化]AspectJWeaver反序列化
- #Android Studio# 模拟器开发者模式
- COJ 0359 xjr考考你数据结构(根号2)线段树区间增加
- python基础(中)
- 【linux/shell】Centos7环境搭建、服务器搭建(脚本)
- 获取店铺商品详情和订单详情
- DELL H61刷BIOS开启AHCI
- 交换机的端口工作模式一般可以分为三种:Access,Multi,Trunk。
- 【干货】java课程实战培训
热门文章
- taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,店铺订单明文接口,店铺订单解密接口,店铺订单消息推送接口
- 在线播放ppt html5,强大的HTML5幻灯片系统:H5Slides
- 20220712 初识JS
- IAAS基于开源openstack框架搭建云计算平台和各组件基础搭建内容包括mysql、keyston、Glance、Nova、Neutron、Dashboard、Heat、Trove等
- C语言实现统计整数出现次数
- (Note)Python 统计列表中各元素出现的次数
- ClamWin杀毒程序的改写
- 设备在升级界面文字或图像方向偏转问题修改方案(RK3399方案)
- 我只是一名创业者,不是成功者
- 度度熊与邪恶大魔王 (百度之星之资格赛)