2017-08-11 164 views
1

从Angular文档中可以看出,$sceDelegateProvider.resourceUrlWhitelist可以设置受信任的资源URL,但是我需要控制器的功能。

我想在我的服务中设置可信资源URL的白名单。因此,我只允许使用$sce服务,而不是供应商..

我是想实现这个例子,它使我的错误( “$ SCE:不安全 需要一个安全/信任值”):

this.renderUrl = this.$sce.getTrustedUrl(${this.baseUrl})+`/x/y/?name=${this.name};

然后注入的renderUrl到HTML:

<iframe ng-src="{{$ctrl.renderUrl}}"></iframe> 

有没有办法从$sce服务设定一个值得信赖的资源的URL,所以它会被添加到受信任资源的URL的whitlist?

回答

1

创建过滤器:

app.filter('trusturl', ['$sce', function ($sce) { 
    return function(url) { 
    return $sce.trustAsResourceUrl(url); 
    }; 
}]); 

在服务:

// Injecting Filter in Service 
app.service('trustUrlService', function ($scope,$filter) { 

    $scope.trustUrl = function(url){ 
    return $filter('trusturl')(url); 
    }; 

}); 

在控制器使用这样的:

app.controller("myCtrl", function($scope,trustUrlService) { 
    $scope.url = trustUrlService.trustUrl(url); 
}); 

模板,你可以使用这样的:

<iframe ng-src={{ imageHref | trusturl }}" /> 
+0

谢谢,我知道这个选项。我正在寻找一种方式,它将是更通用的情况下,我会有相同的基础网址的前缀。 $ sce.trustAsResourceUrl( 'https://example.com/url');限制我并迫使我每次调用该方法以获得相同的基础url。 – Moris

+0

@Moris更新了我的回答 –

+0

我不能在服务中使用提供者.... – Moris