我知道在Stackoverflow
中有很多问题和答案,我读了很多,但都没有。
我在标题Android WebView
中澄清了因为它是最重要的目标,但我希望这也适用于其他设备。我在使用Intel XDK
并SM-G355M
安装了Android 4.4.2
的 应用上以及 {{上测试了以下代码1}}安装在Safari
上iPhone 5C
;
我在两种情况下得到的都是相同的值,iOS 9.3.4
(有时我得到true
即使我有互联网连接。)
我试过了:
false
,它总是给出相同的值。navigator.onLine
没有触发document.addEventListener("online", ...
无法正常工作,对服务器没有影响? 代码: https://nanilab.com/stackoverflow/webview-internet-connection.php(此链接现已中断)
选项1 :
ajax
选项2 :
function option1(){
var isOffline = 'onLine' in navigator && !navigator.onLine,
text = isOffline == true ? ' without connection ' : ' connected ';
$('.option-one span').text(text);
$('.option-one i').text('checked').hide().fadeIn(200);
setTimeout(function(){
option1();
}, 1000);
}
选项3 :
window.addEventListener("offline", function(){ $('.option-two span').text(' without connection'); }, false);
window.addEventListener("online", function(){ $('.option-two span').text(' connected'); }, false);
在function option3(){
$.ajax({
url: '/stackoverflow/blank.php',
success: function(data){
print(' connected ');
},
error: function(jqXHR, textStatus, error) {
print(' without connection ');
}
});
function print(text){
$('.option-three span').text(text);
$('.option-three i').text('checked').hide().fadeIn(200);
setTimeout(function(){
option3();
}, 2000);
}
}
上安装了Intel XDK
构建的 应用
我做错了什么?
答案 0 :(得分:6)
Apache Cordova (被称为PhoneGap
)是开源 移动开发框架。它允许您使用标准网络技术 - HTML5
,CSS3
和JavaScript
进行 cross-platform
开发。应用程序在针对每个平台的包装器内执行,并依赖符合标准的API
绑定来访问每个设备的功能,如传感器,数据,网络状态强>等
document reference cordova
在您的问题中(选项1):
navigator.onLine
... 不正在工作,因为(在android
上)它被破坏了{" raw"版本,Cordova
启用webview
不同}(正如您所知),您必须使用 WebView
构建Cordova Framework
应用。 Cordova
已经开发完全来解决此问题。 PhoneGap
中的GAP是"虚拟机","沙盒"之间的差距。并访问硬件 AND 它的跨平台。
Android Permissions: 应用程序/ AndroidManifest.xml中
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
科尔多瓦Permissions: 应用程序/ RES / XML / config.xml中
<feature name="NetworkStatus">
<param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
</feature>
Cordova
安装https://cordova.apache.org/docs/en/latest/guide/cli/
https://nodejs.org/en/download/
node-v4.5.0-x86.msi
success.
Windows上的C:\>npm install -g cordova
然后离开!
我已将您的代码构建到cordova
,我到达那里(希望是难题),这里是我目前所拥有的一些图像[不在{ {1}}确切地说,{参见第二张图片中的WebView
输出}](注意事件监听器正在工作; O),但还不够好:o()。
答案 1 :(得分:1)
在Chrome和Safari中,如果浏览器无法连接到局域网(LAN)或路由器,则它处于脱机状态;所有其他条件都返回true。因此,虽然您可以假设浏览器在返回false值时处于脱机状态,但您不能认为真值必然意味着浏览器可以访问Internet。您可能会收到误报,例如计算机运行的虚拟化软件具有始终“连接”的虚拟以太网适配器。因此,如果您确实想确定浏览器的在线状态,则应开发其他检查方法。要了解详情,请参阅HTML5 Rocks文章http://www.html5rocks.com/en/mobile/workingoffthegrid/