检查设备是否可以访问 Internet 的最佳方法是什么?
What is the best way to check if the device has Internet access?
我想检查设备是否可以互联网访问。来自官方的 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();
将 return:WiFi connection
.
或者连接到 3G 网络 phone 运营商,但用户没有足够的信用点数用于互联网。在这种情况下,checkConnection();
将 return:Cell 3G connection
但在这两种情况下,即使已连接,用户也无法真正访问互联网。
我认为唯一的办法就是ping google或其他服务器来检查是否真的可以上网,在states[networkState] != No network connection
的情况下
或者您认为 navigator.onLine
可以 运行 在所有设备上(Android、iOS、BlackBery 10?
我希望我表达得很好,我的英语真的很烂。
最好遵循线上线下的惯例。在此处查看官方文档:http://docs.phonegap.com/en/1.8.1/cordova_events_events.md.html#online
嗯...这是一个讨论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);
}
有一个插件可以帮助您做到这一点:
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);
中
我想检查设备是否可以互联网访问。来自官方的 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();
将 return:WiFi connection
.
或者连接到 3G 网络 phone 运营商,但用户没有足够的信用点数用于互联网。在这种情况下,checkConnection();
将 return:Cell 3G connection
但在这两种情况下,即使已连接,用户也无法真正访问互联网。
我认为唯一的办法就是ping google或其他服务器来检查是否真的可以上网,在states[networkState] != No network connection
或者您认为 navigator.onLine
可以 运行 在所有设备上(Android、iOS、BlackBery 10?
我希望我表达得很好,我的英语真的很烂。
最好遵循线上线下的惯例。在此处查看官方文档:http://docs.phonegap.com/en/1.8.1/cordova_events_events.md.html#online
嗯...这是一个讨论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);
}
有一个插件可以帮助您做到这一点: 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);