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 ios 和 android 项目的代码相同,但在设备/模拟器/模拟器上,它只执行失败方法。
我检查了 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/Phonegap Ipad 3 和 Iphone 4s 不够快?
为啥我的 AngularJS 视图无法在 Cordova 中加载?
使用 nodejs 8、angularjs、ionic3、cordova8 更新 cordova-android 6 到 9、cordova-ios 5 到 6