在Android WebView(Cordova)中检查互联网连接

时间:2016-08-21 17:30:46

标签: javascript android cordova webview

我知道在Stackoverflow中有很多问题和答案,我读了很多,但都没有。

我在标题Android WebView中澄清了因为它是最重要的目标,但我希望这也适用于其他设备。我在使用Intel XDKSM-G355M 安装了Android 4.4.2 应用上以及 {{上测试了以下代码1}}安装在SafariiPhone 5C ;

我在两种情况下得到的都是相同的值,iOS 9.3.4(有时我得到true即使我有互联网连接。)

我试过了:

  1. false,它总是给出相同的值。
  2. navigator.onLine没有触发
  3. document.addEventListener("online", ...无法正常工作,对服务器没有影响?
  4. 代码: 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构建的

    应用

    https://youtu.be/wHJHG5dP_eM

    我做错了什么?

2 个答案:

答案 0 :(得分:6)

Apache Cordova (被称为PhoneGap)是开源 移动开发框架。它允许您使用标准网络技术 - HTML5CSS3JavaScript进行 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/

转到网页并下载系统的nodejs

https://nodejs.org/en/download/

示例文件

node-v4.5.0-x86.msi

运行(安装)

success.
Windows上的

C:\>npm install -g cordova

然后离开!

我已将您的代码构建到cordova,我到达那里(希望是难题),这里是我目前所拥有的一些图像[不在{ {1}}确切地说,{参见第二张图片中的WebView输出}](注意事件监听器正在工作; O),但还不够好:o()。

demo image offline demo image online

答案 1 :(得分:1)

在Chrome和Safari中,如果浏览器无法连接到局域网(LAN)或路由器,则它处于脱机状态;所有其他条件都返回true。因此,虽然您可以假设浏览器在返回false值时处于脱机状态,但您不能认为真值必然意味着浏览器可以访问Internet。您可能会收到误报,例如计算机运行的虚拟化软件具有始终“连接”的虚拟以太网适配器。因此,如果您确实想确定浏览器的在线状态,则应开发其他检查方法。要了解详情,请参阅HTML5 Rocks文章http://www.html5rocks.com/en/mobile/workingoffthegrid/