【问题标题】:AngularJS $resource POST call on Cordova not working on iOS/Android devices but working on browserCordova 上的 AngularJS $resource POST 调用不能在 iOS/Android 设备上运行,但可以在浏览器上运行
【发布时间】:2015-03-04 22:11:11
【问题描述】:

我有以下代码在我的端点上进行“POST”,如下所示:

var response = $resource(serviceURL, {}, {
        get: {
            method: "POST",
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            },
            transformRequest: function(obj) {
                var str = [];
                for(var p in obj) {
                    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                }
                return str.join("&");
            }
        }
    });

response.get({
        grant_type : grantType,
        client_id : clientId ,
        client_secret: clientSecret,
        username : username,
        password : passwordValue
    }, function(data) {
        alert("Authenticated ...");
    }, function(error) {
        alert("Error");
    });

此验证用户的代码在桌面浏览器中工作(在 Chrome 上测试),但它与我的 Cordova iOS 和 Android 项目的代码相同,但在设备/模拟器/模拟器上,它只执行失败方法。

我检查了 Cordova 的 config.xml 文件,这不是跨域问题(我在 config.xml 文件中有 )。

我已经尝试解决这个问题几个小时,但仍然没有运气。

为什么它只在设备/模拟器/模拟器中失败,但在浏览器中有效???

【问题讨论】:

    标签: android ios angularjs cordova post


    【解决方案1】:

    从 cordova-android 4.0.0 开始,您必须安装白名单插件。也就是说,您必须运行 cordova plugin add cordova-plugin-whitelist 并且一切都应该正常工作。

    改进了白名单功能

    您将需要添加新的 cordova-plugin-whitelist 插件才能继续使用白名单 现在支持设置 Content-Security-Policy (CSP),并且是推荐的白名单方式(请参阅插件自述文件中的详细信息)。 网络请求在没有插件的情况下默认被阻止,所以安装这个插件甚至允许所有请求,即使你正在使用 CSP。

    如需进一步说明,请参考 Cordova Android 4.0.0 release

    【讨论】:

    • 我使用的是cordova 3.7,我们没有将它升级到4.0。如何解决这个问题?
    • @jeewan:应该也适用于cordova 3.6+,但互联网上对此一无所知。 config.xml 设置正确了吗?
    【解决方案2】:

    好的,我解决了这个问题,但我仍然不确定这是否是最佳解决方案,因为我在控制台上看到一些 JS 错误说“拒绝设置不安全的标头 'Origin'”。 我只需使用一些有效的 https URL 设置标头的 Origin 属性,如下所示:

    headers: {
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "Origin": "https://www.google.com"
            }
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2021-04-07
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2012-07-22
      相关资源
      最近更新 更多