$ sce.trustAsResourceUrl()全局

时间:2013-11-18 13:40:58

标签: angularjs

我该怎么做这样的事情: $sce.trustAsResourceUrl('URL_HERE');

在全球范围内,与主要应用的config()run()功能相同,以便任何具有URL_HERE的iFrame,img src等都可以使用?

Docs在解释这个问题上相当差劲。

4 个答案:

答案 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:**']); 
    }
]);