2017-08-11 7 views
1

角度のある文書からは、$sceDelegateProvider.resourceUrlWhitelistが信頼できるリソースURLを設定できると言われていますが、コントローラからその機能が必要です。

サービス内で信頼できるリソースURLのホワイトリストを設定したいとします。

:したがって、私は唯一の私は、この例を実装しようとしていたし、それは私にエラー( 「:危険な は安全/信頼された値が必要$のSCE」)を引き起こした。..プロバイダ

$sceサービスを使用することはできないのです

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

次にHTMLにrenderUrlを注入:それは、信頼できるリソースURLのwhitlistに追加されますので、$sceサービスから信頼されたリソースのURLを設定する方法は、

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

ありますか?

答えて

1

フィルタの作成:

あなたのサービスで
app.filter('trusturl', ['$sce', function ($sce) { 
    return function(url) { 
    return $sce.trustAsResourceUrl(url); 
    }; 
}]); 

:あなたはこのように使用することができ、テンプレートで

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

:コントローラで

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

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

}); 

は次のように使用します

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

ありがとう、私はそのオプションを知っています。私はベースURLの同じ接頭辞を持つ場合には、より汎用的な方法を探しています。 $ sce.trustAsResourceUrl( 'https://example.com/url');私を制限し、同じベースURLに対して毎回そのメソッドを呼び出すように強制します。 – Moris

+0

@モーリス私の回答を更新 –

+0

私はサービス内でプロバイダを使用することはできません.... – Moris

関連する問題