vue3 如何渲染html标签
在 Vue 3 中,如果你想渲染 HTML 标签而不是将它们作为纯文本显示,你需要确保这些 HTML 内容是安全的,以防止 XSS(跨站脚本)攻击。
Vue 提供了 v-html
指令来渲染元素内的 HTML。
下面是一个简单的例子展示如何使用 v-html
指令来渲染 HTML 字符串:
<template> <div id="app"> <div v-html="unsafeHtml"></div> </div> </script> <script setup> import { ref } from 'vue'; const unsafeHtml = ref('<p>Hello Vue!</p>'); </script>
在这个例子中,unsafeHtml
是一个包含 HTML 字符串的响应式属性。v-html
指令告诉 Vue 将这个字符串作为 HTML 渲染到 DOM 中。
需要注意的是,这里的变量名称为 unsafeHtml
是为了提醒我们直接渲染用户提供的数据可能会导致安全问题。
如果你的数据来源于不可信的源,你应该对其进行适当的净化处理。
可以使用类似 dompurify
这样的库来净化 HTML,确保不会执行任何恶意脚本。
例如,你可以这样使用 dompurify
:
<template> <div v-html="safeHtml"></div> </template> <script setup> import { ref } from 'vue'; import { JSDOM } from 'jsdom'; import DOMPurify from 'dompurify'; const windowWithJSDOM = new JSDOM('').window; DOMPurify.setConfig({ WINDOW: windowWithJSDOM }); const unsafeHtml = '<p>Hello, <b>world!</b></p>'; const safeHtml = ref(DOMPurify.sanitize(unsafeHtml)); </script>
在这个示例中,我们使用了 DOMPurify
来确保我们的 HTML 是安全的。
这很重要,因为直接使用 v-html
可能会带来安全风险。确保在生产环境中总是净化你的 HTML 数据。