使用Cordova Phonegap 3.3.0在iOS应用程序中检查互联网连接不起作用

7
我已经尝试了Cordova文档上这个指南,但好像没有起作用。
这是我的代码:
我在config.xml中添加了<plugin name="NetworkStatus" value="CDVConnection" />
再把这段代码加入到我的index.html文件中:
    <script type="text/javascript">


        document.addEventListener("deviceready", onDeviceReady, false);

        // device APIs are available
        //
        function onDeviceReady() {
            alert("1"); // runs this alert
            checkConnection();
        }

        function checkConnection() {
            var networkState = Connection.CELL;
            alert("2"); // doesn't run this

            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]);
        }

    </script>

var networkState = Connection.CELL; 似乎引起了问题,因为它不会运行以下警告,我还尝试了 navigator.connection.type,但结果相同。

当我在 Chrome 中运行应用程序时,控制台会输出以下错误:

Uncaught ReferenceError: Connection is not defined 

有人知道如何解决这个问题吗?

谢谢


您是否已在您的 index.html 文件中引入了 Cordova.js - user3110424
是的,我有<script type="text/javascript" src="cordova.js"></script> - smj2393
3个回答

21

我终于解决了这个问题!! - 我从头开始重新做,并执行了以下操作:

命令行:

sudo npm install -g cordova
cordova create hello com.example.hello HelloWorld
cd hello
cordova platform add ios
cordova platforms ls //This will list ios
cordova plugin add org.apache.cordova.network-information
cordova build

拖动我的文件(HTML、Javascript等)到platforms/ios/www/文件夹中。

在Xcode中打开hello.xcodeproj

编辑config.xml并添加以下行:

<feature name="NetworkStatus">
    <param name="ios-package" value="CDVConnection" />
</feature>

然后在我的索引文件中使用了JavaScript:

    <script type="text/javascript">
        document.addEventListener("deviceready", onDeviceReady, false);
        // device APIs are available
        function onDeviceReady() {
            if(navigator.network.connection.type == Connection.NONE){
                alert("nocon");
            }else{
                alert("yescon");
            }
        }
    </script>

在 iPhone / iPad 模拟器中运行它,如果有连接,它将输出 "yescon";如果没有连接,则输出 "nocon"!!

希望这能帮到你!


2
更简单的方法,无需从头开始- https://dev59.com/LWIk5IYBdhLWcg3wPcGB#19688926 - zack
无法工作。我正在使用iOS7和Cordova 3.3,使用了connection.CELL。 - kavinhuh
我没有使用connection.CELL,我检查了一下是否有连接。 - smj2393

0

检查一下你是否在HTML文件中引入了Cordova.js文件。

<script type="text/javascript" src="cordova.js"></script>

并修改您的项目中的App/Supporting Files/Cordova.plist

<key>Plugins</key>
     <dict>
     <key>NetworkStatus</key>
     <string>CDVConnection</string>
</dict>

Cordova.plist 被停用并被 config.xml 取代,上面的代码基本上与插件代码相同。 - smj2393

0
这个对我来说有效:
if(navigator.network.connection.type == Connection.NONE){
//no connection
}else{
//You are connected.
}

虽然我查阅了文档,看起来使用以下这两行有区别:

var networkState = navigator.network.connection.type;

navigator.network.connection.type 对所有蜂窝数据都设置为 Connection.CELL_2G

是不是应该使用 var networkState = Connection.CELL_2G;


我已经尝试使用navigator.network.connection.type,但我认为它已经被弃用了或者在iOS上不起作用。在Cordova文档页面(3.3.0版本)的底部有这样的说明:iOS问题iOS无法检测到蜂窝网络连接的类型。 对于所有蜂窝数据,navigator.connection.type都设置为Connection.CELL。 - smj2393
它说“Connection.CELL_2G”,我不确定这是否有影响。 - JunM
重新构建应用程序并复制www文件后,它仍然无法工作...当你说你让它工作时,你使用的是cordova 3.3.0吗? - smj2393
我正在使用Cordova 2.9。 - JunM
奇怪,现在它输出错误:ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml :(我在config.xml中有这行代码 <feature name="NetworkStatus"><param name="ios-package" value="CDVConnection" /></feature> ... 所以不明白为什么不起作用!Cordova文档太糟糕了..真的需要重写。 - smj2393

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接