9

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

它不起作用.. 这里有一个错误报告,但我认为这与它无关。

--

实际上我认为不可能得到通知,因为即使在 Firefox 中我们也不会收到通知,如果用户希望浏览器知道它处于脱机状态,则需要手动标记“脱机工作”。

--

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

在此处输入图像描述

4

3 回答 3

5

您应该能够使用 navigator.onLine。这是帮助页面

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

navigator.onLine 是一个维护真/假值的属性(true 表示在线,false 表示离线)。每当用户通过选择相应的菜单项(文件 -> Firefox 中的脱机工作)切换到“离线模式”时,都会更新此属性。

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

Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService)
    .addObserver(myF­unction, "network:offline-status-changed", false);
于 2011-03-01T20:22:00.900 回答
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 组件。

于 2011-03-10T13:28:25.973 回答
0

嗯...根据 HTML5(阅读 echmascript 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 及以下版本必须轮询连接。

于 2011-03-11T12:16:27.260 回答