【问题标题】:What is the best way to check if the device has Internet access?检查设备是否可以访问 Internet 的最佳方法是什么?
【发布时间】:2015-11-15 14:34:33
【问题描述】:

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

此代码,仅用于获取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

但在这两种情况下,即使已连接,用户也无法真正访问互联网。

我认为唯一的办法是 ping 谷歌或其他服务器以检查是否真的可以访问互联网,在 states[networkState] != No network connection 的情况下

或者您认为navigator.onLine 可以在所有设备(Android、iOS、BlackBery 10)上运行吗?

我希望我表达得很好,我的英语真的很烂。

【问题讨论】:

    标签: cordova cordova-plugins navigator


    【解决方案1】:

    嗯...这里是讨论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); 
    }
    

    【讨论】:

    • 最后一件事,我如何修改这个脚本来抛出一个alert,如果win 可以访问互联网?
    • 这可能会有所帮助:testInternet(function() { alert('Has Internet Connectivity');}, function() { alert('Has No Internet');});
    【解决方案2】:

    有一个插件可以帮助您做到这一点: 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);

    【讨论】:

    • 网络信息仅测试设备是否连接到 wifi 或 cell-service...当没有时它会触发 onOffline 方法。但是,如果您使用的是 wifi,并且可以说路由器已关闭或您的互联网提供商无法访问,那么它无法为您提供帮助。因为您已“连接”到 wifi,所以将其视为“在线”。此答案和@Tushar 答案的组合应涵盖所有基础。
    【解决方案3】:

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

    【讨论】:

    • 您认为如果我连接到 WiFi 网络没有互联网访问在线活动会运行吗?因为我将“连接”但“没有互联网”。
    • Hmm... 这是一个讨论iswwwup.com/t/f3e5374b74ca/… 他们提到的解决方案... 测试此地址以检查设备是否可以访问互联网的函数如下所示: function testInternet( win,fail){ $.get("google.fr/blank.html").done(win).fail(fail); } or , function testInternet(win,fail){ $.ajax({ url:"google.fr/blank.html", timeout:5000, //超时5s type: " GET”,缓存:假 }).done(win).fail(fail); }
    • 对不起,现在添加为另一个答案。
    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2011-01-03
    相关资源
    最近更新 更多