【问题标题】:Check internet connection in Android WebView (Cordova)在 Android WebView (Cordova) 中检查互联网连接
【发布时间】:2016-08-21 17:30:45
【问题描述】:

我知道Stackoverflow 中有很多关于此的问题和答案,我阅读了很多,但没有一个有效。

我在标题中澄清了 Android WebView,因为它是最重要的目标,但我希望这也适用于其他设备。我在一个 应用程序上测试了以下代码@与iOS 9.3.4;

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

我试过了:

  1. navigator.onLine,它总是给出相同的值。
  2. document.addEventListener("online", ... 不会触发
  3. ajax 不起作用,反正对服务器没有影响?

代码: 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);
    }
}

使用Intel XDK 构建的应用程序安装在SM-G355M with Android 4.4.2

https://youtu.be/wHJHG5dP_eM


我做错了什么?

【问题讨论】:

标签: javascript android cordova webview


【解决方案1】:

Apache Cordova(原名PhoneGap)是一个开源 移动开发框架。它允许您使用标准 Web 技术-HTML5CSS3JavaScript 进行cross-platform 开发。应用程序在针对每个平台的包装器内执行,并依赖符合标准的API 绑定来访问每个设备的功能,例如传感器、数据、网络状态等。 document reference cordova

在您的问题中(选项 1):

navigator.onLine 

...工作,因为(在android)它已损坏{“原始”版本,Cordova 启用 webview 不同}(如您所见) ,您必须使用 Cordova Framework 构建您的 WebView 应用程序。 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" />

科尔多瓦权限: 应用程序/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()。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多