Cordova 上的 AngularJS $resource POST 调用不能在 iOS/Android 设备上运行,但可以在浏览器上运行

Posted

技术标签:

【中文标题】Cordova 上的 AngularJS $resource POST 调用不能在 iOS/Android 设备上运行,但可以在浏览器上运行【英文标题】:AngularJS $resource POST call on Cordova not working on iOS/Android devices but working on browser 【发布时间】: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 iosandroid 项目的代码相同,但在设备/模拟器/模拟器上,它只执行失败方法。

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

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

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

【问题讨论】:

【参考方案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"
        

这对我有用。

【讨论】:

以上是关于Cordova 上的 AngularJS $resource POST 调用不能在 iOS/Android 设备上运行,但可以在浏览器上运行的主要内容,如果未能解决你的问题,请参考以下文章

无法安装离子cordova-res

ionic+cordova+angularJs

Cordova-res 未安装在 ionic cordova

AngularJS/Cordova/Phonegap Ipad 3 和 Iphone 4s 不够快?

为啥我的 AngularJS 视图无法在 Cordova 中加载?

使用 nodejs 8、angularjs、ionic3、cordova8 更新 cordova-android 6 到 9、cordova-ios 5 到 6