ng-bind-html 来防止在内容中执行脚本



我面临的问题是我从具有HTML内容的服务器获取数据

<p> hello <a class='mention'data-id='1'>Amerr</a></p>

由于ng-bind-htmlSantaize,它将删除所有潜在威胁以及data-id='1'等属性。我需要我的指令。所以我用

  1. $compile我的指令作用于锚标签.
  2. $sce.trustAsHtml 返回组合的代码。

所以如果有任何文字,比如

"<p> {{axy}} /p>n"

$compile(html_code)($scope)

这将执行代码并导致角度执行表达式导致问题。帮助我如何解决这个问题。

var controller= app.controller('Homecontrol', function($scope) {
  $scope.body = socket.emit('hello');
  $scope.to_trusted = function(html_code) {
    if (/<[a-z][sS]*>/i.test(html_code)) {
      var a = $compile(html_code)($scope);
      return $sce.trustAsHtml(a[0].innerHTML);
    } else {
      return html_code;
    }
  }
});
app.directive('mention', function (){
  return {
    restrict: 'AEC',
    transclude: true,
    template: '<a ng-transclude ></a>',
    replace: true,
   }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<p ng-bind-html=toTrust(body) ></p>

我最终通过解析字符串来做到这一点。Jquery.parseHTML并编译了所需的DOM,需要$compile指令才能对其进行操作。并被 DOM 取代。

最新更新