Angular:我可以完全禁用消毒功能吗?

托马斯:

是否可以完全禁用HTML的清理功能?

我要实现的是在控制器中:

$scope.greeting = '<h2>Hello World</h2>'

在我看来

{{greeting}}

我不能(也不想)使用ng-bind-html等,我想一起禁用所有消毒功能。

只是为了提供更多背景信息-我正在准备简单的“框架环绕”以开发用于特定系统的模板。

当您为该系统开发模板时,它们具有预定义的代码段,您可以通过编写“ {{something}}”将其放置在页面上,但是该代码段不是在有角度的(可能是胡须之类的)上运行。

现在,该模板只能在线开发,它对用户非常不友好。因此,我以相应的路线等角度设置了一个简单的项目,这样每个人都可以在自己的机器上开发模板,然后将其复制到系统中。

这就是为什么在模板文件中不应该注意到它是成角度的,而是尽可能地靠近其系统。

最后一点-我确实尝试过:

myApp.config(['$sceProvider',function($sceProvider){
    $sceProvider.enabled(false);
}]);

没为我做任何事

戴夫·阿尔佩罗维奇(Dave Alperovich):

是的,您可以关闭SCE,但这不会导致您的字符串插入到HTML中

使用您的方案:

  $scope.movie = {title:"<h1>Egghead.io AngularJS, Binding</h1>",
 src:"http://www.youtube.com/embed/Lx7ycjC8qjE"};

并直接插入标题,而无需使用 ng-bind-html="movie.title"

<p>{{movie.title}}</p>

会产生这个

<h1>Egghead.io AngularJS Binding</h1>

直插值似乎已被清除,但实际上并未编译。

除非在指令中进行编译,否则使用HTML插入的字符串将被视为字符串。

其他框架往往是“基于字符串的”(它们直接输入浏览器),而AngularJS是“基于DOM的”,它会编译HTML并通过作用域和监视事件来积极地对其进行管理。Martin Fowler将此称为“模板视图”与“变换视图”

HTML可以在指令中进行编译,但只能在标记和控制器中进行内插


我创建了2个尝试访问“不安全网址”的Plunker,这仅表示我在ng-src不使用的情况下插入了一个网址$sce.trustAs

图表1: 配置期间禁用了Plunker 1 SCE

标记会插值“不安全的网址”:

    <p>{{movie.title}}</p>
    <iframe class="youtube-player" type="text/html" width="640" height="385" ng-src="{{movie.src}}" allowfullscreen frameborder="0">
</iframe>

应用程式停用 $sceProvider

var app = angular.module('plunker', ['ngSanitize']);
app.config(['$sceProvider',function($sceProvider){
    $sceProvider.enabled(false);
}]);
app.controller('MainCtrl', function($scope, $sce) {

  $scope.movie = {src:"http://www.youtube.com/embed/Lx7ycjC8qjE", title:"Egghead.io AngularJS Binding"};
});

插值了“不安全” URL,没有错误。显示视频。


图表2:Plunker 2 app.config使用默认SCE设置被注释掉了

var app = angular.module('plunker', ['ngSanitize']);
//app.config(['$sceProvider',function($sceProvider){
//    $sceProvider.enabled(false);
//}]);
app.controller('MainCtrl', function($scope, $sce) {

  $scope.movie = {src:"http://www.youtube.com/embed/Lx7ycjC8qjE", title:"Egghead.io AngularJS Binding"};
});

错误:

错误:[$ interpolate:interr]无法插入:{{movie.src}}错误:[$ sce:insecurl]阻止了$ sceDelegate策略不允许从URL加载资源。网址:http//www.youtube.com/embed/Lx7ycjC8qjE

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章