Bri*_*euc 10 angularjs cordova phonegap-build ionic
上周一切顺利,当我在设备上运行应用程序或使用Genymotion进行模拟时,所有对api的调用都在工作(要么返回数据,要么失败但至少显示一些内容).
我在用
ionic run android
Run Code Online (Sandbox Code Playgroud)
我添加更新全球cordova离子:
npm install -g cordova ionic
Run Code Online (Sandbox Code Playgroud)
因为所有$ http请求都没有处理.当Api仍然正常工作并且CORS完美设置时,我无法得到任何响应.
我找到的唯一方法是使用选项--livereload或-l:
ionic run -l android
Run Code Online (Sandbox Code Playgroud)
我想避免不惜任何代价使用livereload.
我开始使用ionic 1.0.0和cordova lib 4.3.0从头开始创建一个项目.
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http) {
alert('calling api');
// Create an anonymous access_token
$http
.get(domain+'/oauth/v2/token?client_id='+public_id+'&client_secret='+secret+'&grant_type=client_credentials')
.then(function(response){
alert(response.data.access_token);
});
})
Run Code Online (Sandbox Code Playgroud)
所以在使用时:
ionic serve
Run Code Online (Sandbox Code Playgroud)
它正确地警告"调用api"然后响应(该示例的OAuth访问令牌).
但在使用时:
ionic run android
Run Code Online (Sandbox Code Playgroud)
它仅警告'调用api'但似乎不处理http请求.
有人经历过类似的事吗?我对此感到非常头疼.
Kev*_*val 23
随着Cordova 4.0.0的更新,您将面临无法对RESTful API进行HTTP调用以及加载外部资源(包括其他HTML /视频/音频/图像)的问题.
使用cordova-plugin-whitelist将域列入白名单解决了这个问题.
删除白名单插件(如果已安装):
cordova plugin remove cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)
通过CLI添加白名单插件:
cordova plugin add cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)
然后将以下代码行添加到应用程序的config.xml中,该config.xml位于应用程序的根目录中:
建议在文档中:
<allow-navigation href="http://example.com/*" />
Run Code Online (Sandbox Code Playgroud)
要么:
<allow-navigation href="http://*/*" />
Run Code Online (Sandbox Code Playgroud)
和
这个meta标签在你的index.html
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
Run Code Online (Sandbox Code Playgroud)
这个问题的原因:
来自Cordova 4.0.0 for Android的更新:
白名单功能得到了改进
您需要添加新的cordova-plugin-whitelist插件才能继续使用白名单
现在支持设置内容安全策略(CSP),这是白名单的推荐方法(请参阅插件自述文件中的详细信息)
默认情况下,网络请求在没有插件的情况下被阻止,因此安装此插件甚至允许所有请求,即使您使用的是CSP.
此新白名单已增强为更安全和可配置,但旧版白名单行为仍可通过单独的插件(不推荐)使用.
注意:虽然不是此版本的严格部分,但cordova-cli创建的最新默认应用程序默认包含此插件.
当我尝试以下时,它对我有用...
在Config.xml中,允许访问和导航到您的域:
<access origin="http://yourdomain1.com" />
<allow-navigation href="http://yourdomain1.com"/>
Run Code Online (Sandbox Code Playgroud)
然后在index.html中,添加Content-Security-Policy,如下所示:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' http://yourdomain1.com data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline';">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19382 次 |
| 最近记录: |