javascript - Angular html模板作为带有样式属性的字符串呈现没有样式属性
问题描述
我有一个 Util.ts 定义格式函数,如下所示。问题出在具有样式属性的小标签上。
export const formatMessage = (message ) =>{
return '<b>' + message.name+" </b><small style ='color:black;'>" +message.ts + '</small> ' + message.c;
}
然而,当渲染小标签的样式属性被删除。
我不确定为什么会出现这种行为,formatMessage 函数返回的 HTML 字符串模板使用 DIV 的 innerHTML 附加到 HTML,如下所示。
<ul style="list-style-type: none;">
<li *ngFor="let each of messages"><div class='messageStyle' [innerHTML]="each"> </div></li>
</ul>
为什么这个样式属性会被删除(而类属性仍然存在),我该如何解决这个问题?
解决方案
dom sanitizer 会从您的 html 中删除样式。这样做是为了防止 xss 攻击。您可以通过以下方式绕过安全检查:
constructor(private s: DomSanitizer) { }
...
export const formatMessage = (message, sanitizer ) =>{
return sanitizer.bypassSecurityTrustHtml('<b>' + message.name+" </b><small style ='color:black;'>" +message.ts + '</small> ' + message.c);
}
并将 sanitizer 传递给 formatMessage
推荐阅读
- r - 这个怎么解决??[<-.data.frame 中的错误:新列将在现有列之后留下孔
- python - 如何更改子图大小并减少子图之间的空间?
- django - post to django API 在经过身份验证时返回 403 (Forbidden),但在未经过身份验证时可以发布
- android - 当我使用 SMS User Consent API 时 FirebasePhoneAuth 崩溃
- javascript - React Navigation - 返回另一个导航器中的屏幕
- linux - ext4 目录条目如何存储在 i 节点中?
- regex - 在循环中选择第一个出现的数字的正则表达式
- javascript - 如何从 url 获取坐标值
- perl - 在模式匹配中使用未初始化的值 $elements[6] (m//)
- elasticsearch - 是否建议使用 Elastic Search 作为应用程序的权威数据存储?