禁用AngularJS中的严格上下文转义(SCE)

时间:2016-07-09 15:10:16

标签: javascript angularjs syntax angularjs-config

我正在尝试在AngularJS中禁用 SCE。 根据{{​​3}},这是需要做的事情:

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严格的上下文转义   禁止在a时连接多个表达式的插值   值得信赖。

导致错误的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>

我觉得我错过了一些简单的语法错误。请帮忙!

2 个答案:

答案 0 :(得分:1)

首先,您应该从doc

进行检查
  

我可以完全禁用SCE吗?

     

是的,你可以。但是,强烈建议不要这样做。 SCE为您提供了很多安全优势,只需很少的编码开销。采用SCE禁用的应用程序并且要么自己保护它或者在稍后阶段启用SCE将会困难得多。如果您在引入SCE之前已经编写了大量现有代码并且一次将它们迁移到模块中,那么禁用SCE可能是有意义的。

嗯,在这种情况下,我认为您不需要禁用 SCE ,例如,如果您使用ngBindHtml呈现某些HTML,AngularJS会抛出错误除非分配给ngBindHtml的范围变量包含$sce.trustAsHtml

但是,让我们回到错误,一个人说不出口:

  

插值时出错:/ static / movies / {{$ ctrl.movi​​e.id   }} /样品/ sample.mp4

你只需要以正确的方式连接它,就像这样:

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

希望它有所帮助!!

答案 1 :(得分:0)

我找到了this。显然,它不是SCE问题。关于Angular如何与Html5 Video&#34; source:tag相关的问题。

如果只有一个视频源,则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是正确的,我的初始连接是错误的。