2

我已经从文档中加载了启用 Internet 连接所需的所有内容,但所有和任何 Internet 请求都会收到404返回代码。

我知道我试图访问的文件可以跨域进行评估。在这里看到:http: //jsfiddle.net/hutber/VN864/

在此处输入图像描述

我在我的应用程序中运行相同的代码,并在404警报中返回单击。

为了测试我正在运行的连接:

    var networkState = navigator.connection.type;

    var states = {};
    if(typeof Connection!=="undefined"){
        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]);

这将按预期返回连接。目前WiFi connection

配置文件

<access origin="*" />
<feature name="NetworkStatus">
    <param name="android-package" value="org.apache.cordova.NetworkManager" />
</feature>

AndriodManiest.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" />

JS用来调用说http请求

            $.ajax({
                url: 'http://stage.sexdiaries.co.uk/app/users/login',
                type: 'post',
                data: {
                    'uname': values.uname,
                    'pword': values.pword
                },
                crossDomain: true,
                error: function(data){
                    c(data.status);
                },
                success: function(data){
                    c('success: '+data);
                    data = JSON.parse(data);
                    if(data.privateKey){
                        $.jStorage.set('uid',data.ud.uid); //store user ID in the localStorage to persist
                        sessionStorage.setItem('privateKey',data.privateKey); //store privateKey in session so it disapears when the user closers the tab
                        Backbone.history.loadUrl('');
                    }
                }
            });

所以我知道连接是活跃的。我真的有联系吗?我疯了吗?我怎样才能达到这个http请求?

使用 iFrame 添加信息

<iframe width="560" height="315" src="http://stage.sexdiaries.co.uk" frameborder="0" allowfullscreen></iframe>

这给出了以下错误:

在此处输入图像描述 因此,为了 100% 确保我可以访问互联网,我添加了一个应该 100% 工作的 iframe。

4

2 回答 2

9

今天晚上我也遇到了这个问题(请参阅我对原始问题的评论),但我很高兴地报告我已经解决了这个问题。

事实证明,这与 Cordova for Android 4.0.0 的更新有关。来自长乐日志:

  • 现在通过插件提供白名单功能 (CB-7747) 白名单已得到增强,更加安全和可配置 框架现在支持 Content-Security-Policy 的设置(请参阅插件自述文件中的详细信息) 您需要添加新的cordova-plugin-whitelist plugin 旧的白名单行为仍然可以通过插件使用(尽管不推荐)。

所以解决这个问题的方法是安装插件:

ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git

之后,您可以配置可以导航到的主机,出于测试目的,您可以将其设置为:

<allow-navigation href="*" />

这也解释了 iframe 测试失败的原因。我在我的项目中验证了此修复程序,现在一切正常。

祝你好运

于 2015-04-26T20:10:27.063 回答
0

我认为您可能忘记允许访问您的服务器,您可以使用 config.xml 文件来允许访问所有 url 仅用于测试。

于 2013-10-10T09:00:28.647 回答