Tom*_*ito 9 javascript xul xulrunner
在Xul中,我如何知道网络是否已连接?
--update
使用:
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);
Run Code Online (Sandbox Code Playgroud)
和偏好:
pref("network.manage-offline-status", true);
Run Code Online (Sandbox Code Playgroud)
它不起作用..这里有一个错误报告,但我不认为它与它有关.
-
实际上我认为不可能收到通知,因为即使在Firefox中我们也从未收到通知,如果用户希望浏览器知道它处于脱机状态,则需要手动标记"脱机工作".
-
屏幕截图我的Firefox"about:config"过滤"离线"字符串,遗憾的是,没有"network.manage-offline-status":

您应该能够使用navigator.onLine.这是帮助页面
https://developer.mozilla.org/en/Online_and_offline_events
navigator.onLine是一个维护true/false值的属性(对于在线为true,对于离线为false).每当用户通过选择相应的菜单项(文件 - >在Firefox中脱机工作)切换到"离线模式"时,此属性就会更新.
另一种解决方案(由@Neil评论):
Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService)
.addObserver(myFunction, "network:offline-status-changed", false);
Run Code Online (Sandbox Code Playgroud)
我发现最好的方法是使用下面的 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!");
}
};
Run Code Online (Sandbox Code Playgroud)
(来自http://crynobone.com/ci/index.php/archive/view/852)
- 更新
但是,由于它不是一个可靠的解决方案(因为您不能相信该图像将永远存在于网站中),因此最好的解决方案可能是开发一个新的 XPCom 组件。