如何检查设备是否在线或离线 Phonegap

9

如何检查设备(智能手机)是否在线或离线?

我正在使用PhoneGap和jQuery Mobile。

我发现了以下方法:

document.addEventListener("online", yourCallbackFunction, false);

我想要做的是检查互联网连接,并决定是从互联网获取数据还是从设备本地数据库获取。

if(deviceoffline)
  getDataFromLokalDatabase();
else
  getDataFromInternet();
5个回答

12

这是使用原生PhoneGap代码的代码:

function checkInternet() {

    var networkState = navigator.connection.type;

    if(networkState == Connection.NONE) {

        onConnexionError();
        return false;

    } else {

       return true;
    }
}

3
你应该检查是否存在 Connection.UNKNOWN - Paranoid Android

10
你可以使用 navigator.onLine 属性:
var isOffline = 'onLine' in navigator && !navigator.onLine;

if ( isOffline ) {
    //local db
}
else {
    // internet data
}

请注意,如果不支持navigator.onLineisOffline将始终为false。


好的,我在Chrome浏览器上进行了正常测试,结果只得到了false。但是我使用PhoneGap构建了应用程序,并在我的智能手机上进行了测试,它可以工作。谢谢NULL。你帮了我很多 :) - Erdem Güngör
1
navigator.onLine在我的PhoneGap应用(Android 5上的Nexus 4)中不可靠,至少不是完全可靠的。然而,navigator.onLine是一个被支持的属性。我也发现了这个相关的问题:https://dev59.com/tmYq5IYBdhLWcg3wrihD。 - Mathias Conradt

2
使用jQuery发起ajax调用并检查错误代码,如果错误代码为0,则表示设备离线。
$.ajax({
    //your ajax options
    error: function (request) { 
         if (request.status == 0) {
            alert("you're offline");
        }
    }
});

1
状态码0表示服务器未响应该请求。这可能是因为设备离线,但并不一定意味着设备离线。 - Jonathan
然而,在大多数情况下,您关心的是您的应用程序是否能够与服务器通信...因此这很重要! - hajikelist

1

请注意,虽然navigator.onLine是最简单的解决方案,但它在所有浏览器上的行为并不一致。在Chrome上,如果你插上了LAN电缆,即使没有互联网,它也会告诉你在线。

你可以使用cordova插件network-information

你也可以尝试向服务器发送AJAX请求;通常你想知道是否离线,因为在这种情况下你无法与服务器通信,所以“离线”通常意味着“无法与服务器通信”(这也可能是由于你的服务器离线造成的)。如果你需要检查带宽或链接质量,玩弄超时或多个请求也很有用。

对于每个用例,离线并不意味着相同,你首先需要知道哪种技术最适合你,然后实现其中一个或几个。

我想做的是检查互联网连接,并决定从互联网还是从设备本地数据库获取数据。

通过发送请求来检查与服务器的链接似乎是最适合您的选择。


0

原生在线功能有些不稳定,特别是在 Web 应用程序环境下。但可以用于页面加载时的初始检查,然而如果你到了那个点,你已经有了互联网连接,所以它有点无用。

尝试使用 Ajax 更加可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接