检查设备是否可以访问Internet的最佳方法是什么?

时间:2015-08-21 15:12:47

标签: cordova cordova-plugins navigator

我想检查设备是否具有互联网访问权限。来自官方的cordova文档:

此代码仅用于获取connection type

function checkConnection() {
    var networkState = navigator.connection.type;

    var states = {};
    states[Connection.UNKNOWN]  = 'Unknown connection';
    states[Connection.ETHERNET] = 'Ethernet connection';
    states[Connection.WIFI]     = 'WiFi connection';
    states[Connection.CELL_2G]  = 'Cell 2G connection';
    states[Connection.CELL_3G]  = 'Cell 3G connection';
    states[Connection.CELL_4G]  = 'Cell 4G connection';
    states[Connection.CELL]     = 'Cell generic connection';
    states[Connection.NONE]     = 'No network connection';

    alert('Connection type: ' + states[networkState]);
}

checkConnection();

但是如何检查设备是否真的可以访问互联网?也就是说,因为可能是设备使用WiFi连接类型连接到路由器,但是它无法访问互联网但只能访问本地。在这种情况下,checkConnection();将返回:WiFi connection

或者连接到3G网络电话运营商,但用户没有足够的互联网信用额度。在这种情况下,checkConnection();将返回:Cell 3G connection

但在这两种情况下,如果连接,用户都没有真正的互联网访问权限。

states[networkState] != No network connection

的情况下,我认为唯一可以ping谷歌或其他服务器来检查是否确实有互联网访问权限

或者你认为navigator.onLine可以在所有设备上运行(Android,iOS,BlackBery 10?

我希望我表达得很好,我的英语很糟糕。

3 个答案:

答案 0 :(得分:4)

嗯......这是一个讨论http://iswwwup.com/t/f3e5374b74ca/android-cordova-plugin-to-detect-internet-connection.html

他们提到的解决方案......

测试此地址以检查设备是否可以访问互联网的功能如下所示:

function testInternet(win,fail){
    $.get("http://www.google.fr/blank.html").done(win).fail(fail);
}
Or ,

function testInternet(win,fail){
    $.ajax({
         url:"http://www.google.fr/blank.html",
         timeout:5000,   //timeout to 5s
         type: "GET",
         cache: false
       }).done(win).fail(fail); 
}

答案 1 :(得分:3)

有一个插件可以帮助您做到这一点: Network information

尝试使用测试功能测试您的请求的URL,如果失败,那么您会做其他事情,如此处解释的许多答案,或使用

document.addEventListener("online", onOnline, false);
function onOnline() {  // Handle the online event}

document.addEventListener("offline", onOffline, false);
function onOffline() {  // Handle the offline event}

请记住将这些功能包装在document.addEventListener('deviceready', function() {}, false);

答案 2 :(得分:1)

最好采用在线和离线的惯例。查看官方文档:http://docs.phonegap.com/en/1.8.1/cordova_events_events.md.html#online