2017-08-11 46 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