【发布时间】:2014-03-13 12:50:29
【问题描述】:
我们如何检查 Firefox OS 设备是否连接到互联网?我试过了
navigator.mozConnection, navigator.connection.type, navigator.onLine 但它不起作用。
请告诉我。谢谢。
【问题讨论】:
标签: javascript firefox-os
我们如何检查 Firefox OS 设备是否连接到互联网?我试过了
navigator.mozConnection, navigator.connection.type, navigator.onLine 但它不起作用。
请告诉我。谢谢。
【问题讨论】:
标签: javascript firefox-os
Peter 的建议是可行的,尽管它并不优雅或遵循最佳实践。
我通过提供一些代码示例以及如何实现这一点来补充 Jason Weathersby 的答案。
浏览器行为
这是一个非常依赖于浏览器的实现,您应该谨慎使用这些属性。正如 MDN 中所述,
在 Chrome 和 Safari 中,如果浏览器无法连接到局域网 (LAN) 或路由器,则它处于离线状态;所有其他条件都返回 true。因此,虽然您可以假设浏览器在返回 false 值时处于脱机状态,但您不能假设 true 值必然意味着浏览器可以访问互联网
这意味着您可以在没有互联网访问的情况下连接到 LAN 并且仍然返回 true。
在 Firefox 和 Internet Explorer 中,将浏览器切换为离线 mode 发送一个假值。所有其他条件都返回真值。
如果浏览器不支持 navigator.onLine 上面的例子会 总是以虚假的形式出现(假/未定义)。
代码示例
要检查您是否有连接,请尝试online = window.navigator.onLine;
如果你想监听连接变化,你应该做类似的事情
当连接关闭时
window.addEventListener("offline", function(e) {do something})
连接恢复时
window.addEventListener("online", function(e) {do something})
其他建议
这些解决方案可能不可靠,因此如果您想在这里安全,可以使用一些备用方案。正如http://www.html5rocks.com/en/mobile/workingoffthegrid/ 所示,您可以尝试做类似的事情
window.applicationCache.addEventListener("error", function(e) {
alert("Error fetching manifest: a good chance we are offline");
});
之所以如此,是因为它总是尝试请求清单以检查它是否需要更新其资产列表。如果请求失败,通常是以下两种情况之一:不再使用清单文件(即未托管)或系统无法访问网络以获取文件。
【讨论】:
window.addEventListener("offline", function(e) {do something}) 和window.addEventListener("online", function(e) {do something}) 可以完美运行,而navigator.onLine 不能。谢谢
你可以发出一个 Ajax 请求,看看它是否通过,重复几次,如果没有任何反应,那么你可以推断没有互联网连接,然后从那里做任何你想做的事情。
【讨论】:
为了扩展 Peter 已经提出的建议,您可以通过以下方式为特权打包应用实施解决方法。
// We'll assume we aren't online.
var online = false;
// Assume we're a packaged app with systemXHR permissions.
// https://developer.mozilla.org/docs/Web/Apps/App_permissions
var request = new window.XMLHttpRequest({mozSystem: true});
request.open('HEAD', 'http://www.mozilla.org/robots.txt', true);
request.timeout = 5750;
request.addEventListener('load', function(event) {
console.log('We seem to be online!', event);
online = true;
});
var offlineAlert = function(event) {
console.log('We are likely offline:', event);
}
我不确定如何为托管或非特权应用执行此操作。希望其他人可以提供更好的解决方案。
【讨论】:
if (navigator.onLine) {
//you code if internet is on
}
//在我的firefox操作系统中测试,ZTE OPEN
【讨论】: