cordova 检查设备是否可以访问互联网的最佳方法是什么?

m1m5dgzv  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(230)

我想检查设备是否具有互联网接入。来自Cordova官方文档:
这段代码,只是为了得到connection type

  1. function checkConnection() {
  2. var networkState = navigator.connection.type;
  3. var states = {};
  4. states[Connection.UNKNOWN] = 'Unknown connection';
  5. states[Connection.ETHERNET] = 'Ethernet connection';
  6. states[Connection.WIFI] = 'WiFi connection';
  7. states[Connection.CELL_2G] = 'Cell 2G connection';
  8. states[Connection.CELL_3G] = 'Cell 3G connection';
  9. states[Connection.CELL_4G] = 'Cell 4G connection';
  10. states[Connection.CELL] = 'Cell generic connection';
  11. states[Connection.NONE] = 'No network connection';
  12. alert('Connection type: ' + states[networkState]);
  13. }
  14. checkConnection();

但是我如何检查设备是否真的可以上网呢?也就是说,因为可能设备使用WiFi连接类型连接到路由器,但是它没有上网,只有本地访问。在这种情况下,checkConnection();将返回:WiFi connection .
或者连接到3G网络电话运营商,但用户没有足够的信用用于互联网。在这种情况下,checkConnection();将返回:Cell 3G connection
但在这两种情况下,用户没有一个真实的的互联网接入,即使如果连接。
我认为唯一的事情是ping谷歌或其他服务器,以检查是否真的有互联网接入,在states[networkState] != No network connection的情况下
或者你认为navigator.onLine可以在所有设备上运行(Android、iOS、BlackBery 10?
我希望我表达得很好,我的英语真的很糟糕。

vxf3dgd4

vxf3dgd41#

嗯......这里有一个讨论http://iswwwup.com/t/f3e5374b74ca/android-cordova-plugin-to-detect-internet-connection.html
而他们提出的解决方案......
测试此地址以检查设备是否可以访问互联网的函数如下所示:

  1. function testInternet(win,fail){
  2. $.get("http://www.google.fr/blank.html").done(win).fail(fail);
  3. }
  4. Or ,
  5. function testInternet(win,fail){
  6. $.ajax({
  7. url:"http://www.google.fr/blank.html",
  8. timeout:5000, //timeout to 5s
  9. type: "GET",
  10. cache: false
  11. }).done(win).fail(fail);
  12. }
mu0hgdu0

mu0hgdu02#

有一个插件可以帮助你做到这一点:Network information
尝试使用一个URL测试函数来测试您的请求,如果请求失败,则执行其他操作(如此处所述),或者使用

  1. document.addEventListener("online", onOnline, false);
  2. function onOnline() { // Handle the online event}
  3. document.addEventListener("offline", onOffline, false);
  4. function onOffline() { // Handle the offline event}

请记住将这些函数 Package 在document.addEventListener('deviceready', function() {}, false);

相关问题