一尘不染

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

javascript

我正在尝试使用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调用。


阅读 285

收藏
2020-05-01

共1个答案

一尘不染

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

从规格:

如果用户代理肯定处于脱机状态(与网络断开连接),则返回false。如果用户代理可能在线,则返回true。

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

如果用户代理在用户跟随链接或脚本请求远程页面(或知道这种尝试将失败)时不与网络联系,则navigator.onLine属性必须返回false;否则,必须返回true。

最后,规格说明:

此属性本质上是不可靠的。可以在没有Internet访问的情况下将计算机连接到网络。

2020-05-01