所有请求404与Phonegap 3.0.0

Jam*_*ber 2 javascript jquery android cordova

我已经加载了文档中所需的所有内容以启用互联网连接,但收到的所有和任何互联网请求都带有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]);
Run Code Online (Sandbox Code Playgroud)

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

config.xml中

<access origin="*" />
<feature name="NetworkStatus">
    <param name="android-package" value="org.apache.cordova.NetworkManager" />
</feature>
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

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('');
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

所以我知道连接是活跃的.我真的有联系吗?我疯了吗?我该如何获得此http请求?

添加了iFrame的信息

<iframe width="560" height="315" src="http://stage.sexdiaries.co.uk" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:

在此输入图像描述 所以要100%确保我可以访问互联网我已经添加了一个应该100%工作的iframe.

Tho*_*mas 9

我今晚也遇到了这个问题(请参阅我对原始问题的评论),但我很高兴地报告我发现了这个问题.

事实证明,它与Cordova for Android 4.0.0中的更新有关.来自Changlelog:

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

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

ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git
Run Code Online (Sandbox Code Playgroud)

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

<allow-navigation href="*" />
Run Code Online (Sandbox Code Playgroud)

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

祝好运