Javascript angularjs清理以仅删除JS
我打算允许用户输入iFrame、自定义内联线样式以及其他东西。 但我想删除任何东西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) { $
通过使用$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解决了这个问题。干杯