如何检查Firefox OS是否已连接到Internet

时间:2014-03-13 12:50:30

标签: javascript firefox-os

我们如何检查Firefox OS设备是否已连接到互联网?我试过了 navigator.mozConnection, navigator.connection.type, navigator.onLine但它不起作用。

请告诉我。感谢。

4 个答案:

答案 0 :(得分:3)

彼得建议的是可能的,虽然它不是优雅或遵循最佳实践。

我通过提供一些代码示例以及如何实现这一点来补充Jason Weathersby的答案。

浏览器行为

这是一个非常依赖于浏览器的实现,您应该谨慎使用这些属性。如MDN中所述,

  

在Chrome和Safari中,如果浏览器无法连接到局域网(LAN)或路由器,则它处于脱机状态;所有其他条件都返回true。因此,虽然您可以假设浏览器在返回false值时处于脱机状态,但您不能认为真值必然意味着浏览器可以访问互联网

这意味着您可以连接到没有Internet访问权限的LAN,并且仍然可以返回true。

  

在Firefox和Internet Explorer中,将浏览器切换为离线状态   mode发送false值。所有其他条件都返回真值。

     

如果浏览器不支持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"); });

这之所以有效,是因为它总是尝试请求清单检查是否需要更新其资产列表。如果该请求失败,通常是两件事之一,清单文件不再被使用(即,它没有被托管),或者系统无法访问网络来获取文件。

答案 1 :(得分:1)

您可以发出Ajax请求并查看它是否通过,重复几次,如果没有任何反应,那么您可以推断出没有互联网连接,并从那里做任何你想做的事。

答案 2 :(得分:1)

为了扩展Peter已经提出的建议,以下是如何实施专用打包应用程序的解决方法。

来自Offline Apps on MDN

// 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);
}

我不确定如何为托管或非特权应用程序执行此操作。希望其他人可以提供更好的解决方案。

答案 3 :(得分:0)

if (navigator.onLine) {
//you code if internet is on
}

//在我的firefox OS中测试,ZTE OPEN