如何捕获 ngSantitize 错误并将 html 显示为转义文本
How can I catch ngSantitize errors and display the html as escaped text
我们正在使用 AngularJS 来尝试将用户输入的内容显示为 HTML。大多数时候,用户输入 valid/safe 数据,我们使用 ng-bind-html 正确显示这些数据。有时他们会输入无效的 HTML,我仍然希望将其显示为原始文本。
如果我使用 ng-bind-html 尝试显示无效 HTML 我会收到此错误:
[$sanitize:badparse] The sanitizer was unable to parse the following block of html:
我不想使用 trustAsHtml,因为我不信任我们的消毒剂,并希望确保我们不会在页面上显示不安全 html。
根据 ngBindHtmlDirective
你可以这样做:
HTML:
<div ng-if="isSafeHtml()">
<div ng-bind-html="invalidHtml"></div>
</div>
<div ng-if="!isSafeHtml()">
{{invalidHtml}}
</div>
JS:
$scope.isSafeHtml = function() {
return !!$sce.getTrustedHtml($scope.invalidHtml);
}
修改后的 plunkr:http://plnkr.co/edit/Besix3PfQ1TjUEEagfca?p=preview
我最终创建了一个指令来执行此操作。下面是它的使用方法。
<div ng-bind-html-if-safe="SomeHtml"></div>
可以找到指令的来源here。
我们正在使用 AngularJS 来尝试将用户输入的内容显示为 HTML。大多数时候,用户输入 valid/safe 数据,我们使用 ng-bind-html 正确显示这些数据。有时他们会输入无效的 HTML,我仍然希望将其显示为原始文本。
如果我使用 ng-bind-html 尝试显示无效 HTML 我会收到此错误:
[$sanitize:badparse] The sanitizer was unable to parse the following block of html:
我不想使用 trustAsHtml,因为我不信任我们的消毒剂,并希望确保我们不会在页面上显示不安全 html。
根据 ngBindHtmlDirective
你可以这样做:
HTML:
<div ng-if="isSafeHtml()">
<div ng-bind-html="invalidHtml"></div>
</div>
<div ng-if="!isSafeHtml()">
{{invalidHtml}}
</div>
JS:
$scope.isSafeHtml = function() {
return !!$sce.getTrustedHtml($scope.invalidHtml);
}
修改后的 plunkr:http://plnkr.co/edit/Besix3PfQ1TjUEEagfca?p=preview
我最终创建了一个指令来执行此操作。下面是它的使用方法。
<div ng-bind-html-if-safe="SomeHtml"></div>
可以找到指令的来源here。