angular - Angular 5:显示来自服务器响应的 html 和 xml
问题描述
我有一个场景,我需要从服务器发送的相同字符串中显示 html 和 xml。
来自服务器的回复如下所示:
This is sample text with <b>bold text</b> and also some xml like this <note><to>you</to><from>me</from><heading>title</heading><body>message</body></note>. As you can see it contains both xml to display and html to render.
我试过了:
text;
msg = 'This is sample text with <b>bold text</b> and also some xml like this <note><to>you</to><from>me</from><heading>title</heading><body>message</body></note>. As you can see it contains both xml to display and html to render.'
constructor(private domSanitizer: DomSanitizer) {
}
ngOnInit() {
this.text = this.getInnerHTMLValue();
}
getInnerHTMLValue() {
return this.domSanitizer.bypassSecurityTrustHtml(this.msg);
}
html:
<pre [innerText]="text"></pre>
我收到此错误:
SafeValue must use [property]=binding:...
而当我使用[innerHTML]
而不是[innerText]
xml时已经被清除了。
如何显示示例 xml 代码以及解析 html 标签(如<b>
标签)?至少我怎样才能摆脱这个错误?
解决方案
恐怕这不可能。看看WC3 规格:
用户代理必须将他们不理解的元素和属性视为语义中立的;将它们留在 DOM 中(对于 DOM 处理器),并根据 CSS 设置它们的样式(对于 CSS 处理器),但不会从中推断出任何含义。
这意味着,尽管您的浏览器不知道这些元素,但它们将成为 dom 的一部分,因此不会显示在文本中。
您唯一的解决方案将是自己编码除<b>
, <i>
,... 之外的所有标签:<note>
-><note>
或使用诸如降价之类的东西进行格式化。
作为最简单的解决方法,只需msg
按原样使用而不进行消毒:
<pre>{{msg}}</pre>
由于它不会被解释,因此不需要进行消毒。(当然,类似的标签<b>
也不会被解释。)
推荐阅读
- python - 在 python 2.7 中使用动态数组创建 ctypes 泛型结构
- python - 将空格添加到特定位置的字符串列表
- c++ - 为什么没有像 pthread_mutex_t & std::mutex 那样等同于 pthread_spinlock_t 的 std::?
- python - Selenium 不读取文本
- vue.js - vuejs 代码拆分和灯塔性能
- python - 具有变量值的 Python SQLite IN 运算符
- android - React Native:嵌套文本的边框半径和填充样式
- python - 得到不正确的输出,这是我在获取两个不同列表的总和时遇到问题
- vue.js - Laravel Mix VueJS 生产页面空白
- python - 我可以从 img 标签中使用 BeautifulSoup 刮出“价值”属性吗?