所有请求404与Phonegap 3.0.0

时间:2013-10-10 08:21:49

标签: javascript android jquery cordova

我已经加载了文档中所需的所有内容以启用互联网连接,但收到的所有和任何互联网请求都带有404返回码。

我知道我想要覆盖的文件可跨域评估。见到这里:http://jsfiddle.net/hutber/VN864/

enter image description here

我在我的应用程序中运行相同的代码,并在警报中返回点击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

config.xml中

<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>

这会出现以下错误:

enter image description here 所以要100%确保我可以访问互联网我已经添加了一个应该100%工作的iframe。

2 个答案:

答案 0 :(得分: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

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

<allow-navigation href="*" />

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

祝你好运

答案 1 :(得分:0)

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