我该怎么做这样的事情:
$sce.trustAsResourceUrl('URL_HERE');
在全球范围内,与主要应用的config()
或run()
功能相同,以便任何具有URL_HERE
的iFrame,img src等都可以使用?
Docs在解释这个问题上相当差劲。
答案 0 :(得分:71)
您可以使用过滤器。这些可在全球范围内使用。
angular.module('myApp')
.filter('trustUrl', function ($sce) {
return function(url) {
return $sce.trustAsResourceUrl(url);
};
});
<img ng-src={{ imageHref | trustUrl }}">
答案 1 :(得分:54)
我刚刚从上一个回答中读到你的评论。不确定你是否找到了解决方案。看起来你正在寻找一种白名单式的东西。我最近发现这有$ sce的白名单功能。
取自AngularJS docs for $sceDelegateProvider:
angular.module('myApp', []).config(function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist([
// Allow same origin resource loads.
'self',
// Allow loading from our assets domain. Notice the difference between * and **.
'http://srv*.assets.example.com/**']);
})
有了这个,你可以在这样的iframe中进行字符串插值:
<iframe ng-src="{{ 'http://srv1.assets.example.com/' + url_asset }}"></iframe>
答案 2 :(得分:7)
我也喜欢过滤器解决方案;然而,在我正确注入$ sce之前,它对我没有用...
app.filter('trustUrl', ['$sce', function ($sce) {
return function(url) {
return $sce.trustAsResourceUrl(url);
};
}]);
答案 3 :(得分:1)
我用于存储在文件系统上的视频:
app.config( [
'$sceDelegateProvider',
function($sceDelegateProvider)
{
$sceDelegateProvider.resourceUrlWhitelist(['self','filesystem:**']);
}
]);