我知道Stackoverflow
中有很多与此有关的问题和答案,我读了很多,但都没有用。
我在标题android WebView
中做了澄清,因为它是最重要的目标,但我希望它也可以在其他设备上使用。我在安装了Intel XDK
的应用程序和安装了SM-G355M
的Android 4.4.2
的以及安装了Safari
的iPhone 5C
和iOS 9.3.4
的true
上测试了以下代码;
在这两种情况下,我得到的都是相同的false
值(有时即使有Internet连接,我也会得到navigator.onLine
)。
我试过了:document.addEventListener("online", ...
,它始终提供相同的值。 ajax
不触发Intel XDK
不起作用,无论如何不会影响服务器吗?
代码: https://nanilab.com/stackoverflow/webview-internet-connection.php(此链接现在已断开)
选项1 :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);
}
选项2 :window.addEventListener("offline", function(){ $('.option-two span').text(' without connection'); }, false);
window.addEventListener("online", function(){ $('.option-two span').text(' connected'); }, false);
选项3 :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);
}
}
使用在SM-G355M with Android 4.4.2
上安装的ojit_code构建的应用程序
https://youtu.be/wHJHG5dP_eM
我做错了什么?
最佳答案
Apache Cordova (被称为PhoneGap
)是一个开源 移动开发框架。它允许您使用标准 Web技术-HTML5
,CSS3
和JavaScript
进行 cross-platform
开发。应用程序在针对每个平台的包装器中执行,并依赖于符合标准的API
绑定(bind)来访问每个设备的功能,例如传感器,数据,网络状态等。
document reference cordova
在您的问题中(选项1):
navigator.onLine
…不起作用,因为(在
android
上)它损坏了(“原始”版本,启用了Cordova
的webview
不同)(如您所知),您必须使用 WebView
来构建Cordova Framework
应用程序。 Cordova
的开发是正是来解决此问题。 PhoneGap
中的GAP是“虚拟机”,“沙盒”与对硬件的访问之间的差距,和是跨平台的。Android权限:
app/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" />
Cordova Permissions:
app/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/
转到网页并为您的系统下载nodejs
https://nodejs.org/en/download/
示例文件
node-v4.5.0-x86.msi
运行(安装)
success.
在Windows上:
C:\>npm install -g cordova
走开!
我已经将您的代码内置到
cordova
中,到了那里(希望是困难的问题),这是到目前为止的图像[尚未完全在WebView
中,{请参见第二张图像中的navigator.userAgent
输出}](注意事件监听器正在工作; O),但还不够好:o()。