|Vue3的v-htm这个特性把我整吐了
文章图片
Vue3的v-html特性是一种渲染html字符串的语法糖 , 它可以帮助开发者快速渲染html字符串 , 节省了数据绑定和渲染的时间 。 v-html特性主要有以下特点:
1. 快速渲染:v-html特性可以快速渲染html字符串 , 比如可以通过它把一段html字符串快速渲染到页面上 , 而不需要再去编写js代码 。
2. 可定制:v-html特性可以定制渲染的html字符串 , 可以根据需要添加属性、样式、文本内容等 , 提高开发效率 。
3. 防止XSS攻击:v-html特性可以防止XSS(跨站脚本)攻击 , 因为它会过滤掉html字符串中可能存在的攻击性代码 , 从而保护页面安全 。
4. 支持模板:v-html特性还支持模板 , 可以在html字符串中使用一些模板 , 从而更加灵活地渲染html字符串 。 总之 , v-html特性是Vue3的一种渲染html字符串的语法糖 , 可以提高开发效率 , 防止XSS攻击 , 并且支持模板 , 为Vue3提供了一种更加灵活的渲染方式 。
OK , v-htm指令介绍完了 , 接下来说这个指令有啥问题 。
我原先调用discuz!X的内容的时候 , 用的是dzx自带的数据调用接口 , 这个接口会生成一个js文件 , 文件内容大概是这样的:document.write('<div class=\"xxx\"></div> <button onclick=\"xxx(console.log(\\'12138\\')\"></button>') , 这样可以直接引用这个js文件到html对应的位置 , 直接同步渲染出内容 。
但是 , 原生js中(比如document.write)会直接将被转义的引号转义回去(\\'转义为') , 但是v-html不能 , 最后通过v-html渲染出来的内容 , 是未被转义的 , 导致单引号中的内容全部失效(具体表现 , 就是你点击那个元素没有任何反应) 。所以 , 在用v-html渲染之前 , 要把内容全部转义回去 , 再放到v-html中
解决用的代码:
leta =response.data
letb =a.split(\"document.write('\")
letc =b[1
.slice(0b[1
.length -3)
letd =replaceAll('\\\'''c)
【|Vue3的v-htm这个特性把我整吐了】lete =replaceAll('main-recommend''main-recommend-gg'd)
letf =replaceAll(\"\\\\\"\"\"e)
recommend.value =https://mparticle.uc.cn/api/f
至此 , v-html转义问题全部解决 。
- 设计师|我们如何选择蓝牙耳机,选择耳机时必须考虑的五个因素
- 客户端|什么是多媒体会议系统?多媒体会议的用途特点体现在这些方面!
- 键盘|旗舰就该有旗舰的样子 雷柏VT9双模鼠标开核教程
- 1000元的长袜,是加拿大鹅在羽绒服之外的野心
- |2023跨境电商常见的收款方式有哪些?怎么选择
- 芯片|三星S23有哪些意料外的惊喜,摄像头是一方面,关键是价格
- 超极本|2023年3款“精选”超极本电脑推荐:“最佳轻薄”笔记本,真的香
- 百度|天天查:百度计划推出类似ChatGPT 风格的“Ernie Bot”业务
- |蒋尚义新去了郭台铭的鸿海集团
- 芯片|中国自主研发的振国重器,让外媒感慨:美急于追赶中国