如何知道网络是否已连接?

时间:2011-03-01 20:19:13

标签: javascript xul xulrunner

在Xul中,我如何知道网络是否已连接?

- 更新

使用:

    function observe(aSubject, aTopic, aState) {
        if (aTopic == "network:offline-status-changed") {
            write("STATUS CHANGED!");
        }
    }
    var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
    os.addObserver(observe, "network:offline-status-changed", false);

和偏好:

pref("network.manage-offline-status", true);

它不起作用..有一个bug report here,但我不认为它与它有关。

-

实际上我认为不可能收到通知,因为即使在Firefox中我们也从未收到通知,如果用户希望浏览器知道它是“离线工作”,则需要手动标记“离线工作”离线..

-

截屏我的Firefox“about:config”过滤“离线”字符串,遗憾的是,没有“network.manage-offline-status”:

enter image description here

3 个答案:

答案 0 :(得分:5)

您应该可以使用navigator.onLine。这是帮助页面

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

  

navigator.onLine是一个属性   保持真/假值(对于   在线,虚假离线)。这个   每当用户更新属性   切换到“离线模式”   选择相应的菜单项   (文件 - >在Firefox中脱机工作)。

另一种解决方案(由@Neil评论):

Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService)
    .addObserver(myF­unction, "network:offline-status-changed", false);

答案 1 :(得分:2)

我找到的最好的方法是使用以下javascript代码,其行为类似于ping,并对一些大型网站进行测试,并假设如果它们都没有响应,那么网络必须断开连接

var ping = {};
ping = {
    img:null,
    imgPreload:null,
    timer:null,
    init:function() {
        var sess = new Date();
        var nocache = sess.getTime();
        var imguri = ping.img+"?time="+nocache;
        var ping.imgPreload = new Image();
        ping.imgPreload.onload = function() {
            clearTimeout(ping.timer);
            ping.timer = null;
            alert("Domain is available");
        };
        ping.imgPreload.src = imguri;
        ping.timer = setTimeout("ping.fail_to_ping()",60000);
    },
    fail_to_ping:function() {
        clearTimeout(ping.timer);
        ping.timer = null;
        ping.imgPreload = null;
        alert("Ping to domain failed!");
    }
};

(来自http://crynobone.com/ci/index.php/archive/view/852

<强> - 更新

但是,因为它不是一个可靠的解决方案(因为你无法依赖图像永远存在于网站中),所以最好的解决方案可能是开发一个新的XPCom组件。

答案 2 :(得分:0)

呃...根据HTML5(阅读回声5),on-/offline事件可用。

请见Mozilla Hacks

编辑20/4/2011:
当我正在观看来自MS MIX11的播客时,我刚刚遇到了这个答案的更新:
http://channel9.msdn.com/Events/MIX/MIX11/HTM14在时间43:36左右,讲师实际上是在讨论window.navigator.onLine属性,他用它来检测浏览器(和计算机)是否在线。然后,当他再次上线时,他使用online事件做某事。

此方法仅适用于现代浏览器。所以IE 8及以下版本必须轮询连接。