vue实现html在线预览
Vue 实现 HTML 在线预览的方法
使用 v-html 指令
Vue 提供了 v-html 指令,可以将字符串解析为 HTML 并渲染到页面中。
注意:直接使用 v-html 可能存在 XSS 风险,需确保内容来源可信或进行转义处理。
<template>
<div v-html="htmlContent"></div>
</template>
<script>
export default {
data() {
return {
htmlContent: '<p>这是一段HTML内容</p>'
}
}
}
</script>
使用 iframe 嵌入
通过 iframe 可以实现隔离的 HTML 预览环境,适合展示完整的 HTML 页面。

<template>
<iframe :srcdoc="htmlContent" frameborder="0"></iframe>
</template>
<script>
export default {
data() {
return {
htmlContent: '<html><body><h1>预览内容</h1></body></html>'
}
}
}
</script>
动态渲染组件
通过动态组件或 Vue.compile(仅完整版 Vue 支持)实现复杂 HTML 的解析和渲染。

<template>
<component :is="dynamicComponent"></component>
</template>
<script>
export default {
computed: {
dynamicComponent() {
return {
template: this.htmlContent,
props: [] // 可传递所需props
}
}
},
data() {
return {
htmlContent: '<div>{{ message }}</div>'
}
}
}
</script>
使用第三方库
- vue-html-parser:将 HTML 字符串转换为 Vue 组件。
- sanitize-html:清理 HTML 字符串后配合
v-html使用。
安装示例:
npm install vue-html-parser
使用示例:
import { parse } from 'vue-html-parser';
export default {
methods: {
renderHtml(html) {
return parse(html);
}
}
}
安全注意事项
- 对用户输入的 HTML 内容进行消毒处理,避免 XSS 攻击。
- 使用 CSP(内容安全策略)限制外部资源加载。
- 避免直接渲染未经验证的脚本或样式标签。
示例:完整消毒方案
import DOMPurify from 'dompurify';
export default {
methods: {
sanitizeHtml(html) {
return DOMPurify.sanitize(html);
}
}
}
通过以上方法,可以灵活实现 Vue 中的 HTML 在线预览功能,根据需求选择合适方案并注意安全性处理。






