1

AngularJS で SCEを無効にしようとしています。ドキュメントによると、これは何をする必要があるかです:

angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
  // Completely disable SCE.  For demonstration purposes only!
  // Do not use in new projects.
  $sceProvider.enabled(false);
});

これは私の app.config.js です:

angular.module('yapoApp').config(['$sceProvider', '$locationProvider', '$routeProvider',  '$httpProvider',
    function config($sceProvider, $locationProvider, $routeProvider,  $httpProvider) {

        // disable SCE completely (https://docs.angularjs.org/api/ng/service/$sce)
        $sceProvider.enabled(false);

        $locationProvider.hashPrefix('!');

        $routeProvider.when('/actors', {
            template: '<actor-list></actor-list>'
        }).when('/actors/:actorId', {
            template: '<actor-detail></actor-detail>'
        }).when('/movies/', {
            template: '<movie-list></movie-list>'
        }).when('/movies/:movieId', {
            template: '<movie-detail></movie-detail>'
        }).otherwise('/'), {
            template: '<br><br><br><br><h1> This is temp index</h1>'

        };


    }

]);

そして、私はまだエラーが発生しています:

[$interpolate:noconcat] 補間中のエラー: /static/movies/{{ $ctrl.movi​​e.id }}/sample/sample.mp4 Strict Contextual Escaping は、信頼できる値が必要な場合に複数の式を連結する補間を許可しません。

エラーの原因となっている html テンプレート:

 <video width="{{ $ctrl.videoWidth }}px" controls>
        <source ng-src="/static/movies/{{ $ctrl.movie.id }}/sample/sample.mp4">

        Your browser does not support the video tag.
    </video>

単純な構文エラーが欠落しているように感じます。助けてください!

4

2 に答える 2

1

まず、docからこれを確認する必要があります:

SCE を完全に無効にすることはできますか?

はい、できます。ただし、これは強くお勧めできません。SCE は、わずかなコーディング オーバーヘッドで多くのセキュリティ上の利点を提供します。SCE が無効になっているアプリケーションを自分で保護するか、後の段階で SCE を有効にするのは非常に困難です。SCE が導入される前に記述された既存のコードが多数あり、それらを一度に 1 つのモジュールに移行する場合は、SCE を無効にすることが理にかなっている場合があります。

この場合、 SCEを無効にする必要はないと思います。また、たとえば、ngBindHtmlHTML をレンダリングするために使用する場合、AngularJS は、割り当てられたスコープ変数ngBindHtmlが でラップされていない限り、エラーをスローします$sce.trustAsHtml

しかし、エラーに戻りましょう。

補間中のエラー: /static/movies/{{ $ctrl.movi​​e.id }}/sample/sample.mp4

次のように、正しい方法で連結するだけです。

<source ng-src="{{'/static/movies/' + $ctrl.movie.id + '/sample/sample.mp4'}}">

それが役に立てば幸い!!

于 2016-07-09T18:16:54.817 に答える
0

私はこれを見つけまし。どうやら、それは SCE の問題ではありません。これは、Angular が Html5 Video "source: tag.

ビデオ ソースが 1 つしかない場合、HTML は次のようになります。

<video src="ng-src="{{'/static/movies/' + $ctrl.movie.id +  '/sample/sample.mp4'}}" width="{{ $ctrl.videoWidth }}px" controls>    
        Your browser does not support the video tag.
</video>

これの代わりに:

<video width="{{ $ctrl.videoWidth }}px" controls>
        <source ng-src="{{'/static/movies/' + $ctrl.movie.id +  '/sample/sample.mp4'}}">

        Your browser does not support the video tag.
</video>

問題を解決します。

もちろん、@developer033 は正しく、私の最初の連結は間違っていました。

于 2016-07-09T20:25:59.993 に答える