Javascript angularjs清理以仅删除JS

Javascript angularjs清理以仅删除JS,javascript,angularjs,sanitization,Javascript,Angularjs,Sanitization,我打算允许用户输入iFrame、自定义内联线样式以及其他东西。 但我想删除任何东西 通过使用$sanitize,我似乎删除了太多内容。如果您只想删除脚本标记,则应执行以下操作: angular.module('app', ['ngSanitize']) .directive('testDir', function() { return { restrict: 'A', controller: function($scope, $sce) { $

我打算允许用户输入iFrame、自定义内联线样式以及其他东西。 但我想删除任何东西


通过使用$sanitize,我似乎删除了太多内容。

如果您只想删除脚本标记,则应执行以下操作:

angular.module('app', ['ngSanitize'])
  .directive('testDir', function() {
    return {
      restrict: 'A',
      controller: function($scope, $sce) {
        $scope.sanitizeIt = function() {
          var replacer = /<script>.*(<\/?script>?)?/gi;
          var stripped = $scope.html.replace(replacer, '');
          $scope.sanitizedHtml = $sce.trustAsHtml(stripped);
        };

        $scope.$watch('html', $scope.sanitizeIt);
      }
    };
  });
<body ng-app="app">
  <div test-dir>
    <textarea ng-model="html"></textarea>
    <div ng-bind-html="sanitizedHtml"></div>
  </div>
</body>
在持久化到数据库时,请确保保存经过清理的HTML字符串,而不是HTML字符串

以下是有关
$sce
的更多文档:

$sce


这基本上是
$sanitize
在幕后使用的。注意:除了Chrome之外,我还没有在浏览器中测试过这个正则表达式,所以你可能需要自己做一些调整才能使它适合你的需要。然而,想法是一样的。

当心!此指令将只删除
标记,因此JavaScript可能会在
onclick
onmouseover
onmouseout
等事件中执行。因此,如果应该阻止任何JavaScript执行,那么这根本不是一种保存方法。您的正则表达式当前允许或通过。/*(?)?/gi解决了这个问题。干杯