为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测跨浏览器的在线/离线事件?

/ 猿问

如何检测跨浏览器的在线/离线事件?

如何检测跨浏览器的在线/离线事件?

我正在尝试使用HTML5在线和离线事件准确地检测浏览器何时脱机。

这是我的代码:

<script>
    // FIREFOX
    $(window).bind("online", applicationBackOnline); 
    $(window).bind("offline", applicationOffline);

    //IE
    window.onload = function() {
        document.body.ononline = IeConnectionEvent;
        document.body.onoffline = IeConnectionEvent;
    } </script>

当我在Firefox或IE上点击“脱机工作”时,它工作正常,但是当我实际拔掉电线时它会随机工作。

检测此变化的最佳方法是什么?我想避免重复带有超时的ajax调用。


查看完整描述

3 回答

?
qq_笑_17

浏览器供应商无法就如何定义离线达成一致。有些浏览器具有脱机工作功能,他们认为这与缺乏网络访问是分开的,这与互联网访问不同。整件事情一团糟。某些浏览器供应商在实际网络访问丢失时更新navigator.onLine标志,而其他浏览器供应商则不会。

从规格:

如果用户代理明确脱机(与网络断开连接),则返回false。如果用户代理可能在线,则返回true。

当此属性的值更改时,将触发联机和脱机事件。

如果用户代理在用户跟踪链接时或者脚本请求远程页面时(或者知道此类尝试将失败),则navigator.onLine属性必须返回false,否则必须返回true。

最后,规格说明:

该属性本质上是不可靠的。计算机可以连接到网络而无需访问Internet。


查看完整回答
反对 回复 2019-08-17
?
慕圣8478803

主要的浏览器供应商在“离线”意味着什么不同。

Chrome和Safari会自动检测您何时“离线” - 这意味着当您拔下网络电缆时,“在线”事件和属性会自动触发。

Firefox(Mozilla),Opera和IE采用不同的方法,并认为您“在线”,除非您在浏览器中明确选择“离线模式” - 即使您没有可用的网络连接。

有关Firefox / Mozilla行为的有效参数,这些参数在此错误报告的注释中列出:

https://bugzilla.mozilla.org/show_bug.cgi?id=654579

但是,要回答这个问题 - 您不能依赖在线/离线事件/属性来检测是否存在网络连接。

相反,您必须使用其他方法。

此Mozilla Developer文章的“Notes”部分提供了两种替代方法的链接:

https://developer.mozilla.org/en/Online_and_offline_events

“如果API未在浏览器中实现,您可以使用其他信号来检测您是否处于脱机状态,包括侦听AppCache错误事件和XMLHttpRequest响应”

这链接到“侦听AppCache错误事件”方法的示例:

http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache

...以及“侦听XMLHttpRequest失败”方法的示例:

http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request

HTH, - 乍得


查看完整回答
反对 回复 2019-08-17
?
慕运维1137616

今天有一个开源JavaScript库可以完成这项工作:它被称为Offline.js

自动向用户显示在线/离线指示。

https://github.com/HubSpot/offline

请务必查看完整的自述文件。它包含您可以挂钩的事件。

这是一个测试页面。这很漂亮/顺便说一下有很好的反馈用户界面!:)

Offline.js Simulate UI是一个Offline.js插件,允许您测试页面如何响应不同的连接状态,而无需使用强力方法来禁用实际连接。


查看完整回答
反对 回复 2019-08-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信