Vue3 中 v-html 的使用

一、基礎用法

v-html 指令可以直接將字元串渲染為 HTML 內容,其用法可以十分簡單:


<template>
  <div v-html="htmlContent"></div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: "<p>獻給所有為了夢想狂奔的人</p>"
    }
  }
}
</script>

上面的例子中,我們將 data 中的 htmlContent 賦值為一個包含 p 標籤的字元串,使用 v-html 渲染到頁面中。

二、安全考慮

然而直接使用 v-html 渲染 HTML 字元串有可能會造成安全問題。如果字元串中包含有惡意的代碼,那麼很有可能會導致 XSS(跨站腳本攻擊)風險。因此在 v-html 使用過程中,需要注意一些安全問題。

Vue 3 中提供了一個新的 API:createVNode,可以用於創建虛擬節點,它可以幫助我們更好地渲染動態內容。下面舉一個例子,介紹如何在使用 v-html 的同時保證安全性:


<template>
  <div :innerHTML="rawHtml"></div>
</template>

<script>
import { createVNode } from 'vue';

export default {
  data() {
    return {
      htmlContent: "alert('malicious code')"
    }
  },

  computed: {
    rawHtml() {
      const tmp = document.createElement('div');
      tmp.innerHTML = this.htmlContent;

      const childNodes = Array.from(tmp.childNodes).map(node => {
        return node.nodeType === 3 // text node
          ? createVNode('template', null, { default: () => node.textContent })
          : createVNode(node.tagName, null, null, null, Array.from(node.attributes), null, Array.from(node.childNodes).map(n => this.rawHtml(n)));
      });

      return createVNode('div', null, childNodes);
    }
  }
}
</script>

通過上面的代碼,我們可以將字元串通過 createVNode 來創建虛擬節點,從而避免了直接將字元串渲染到 DOM 中的安全問題。

三、結語

通過本文的講解,我們可以發現 v-html 指令在 Vue 開發中可以起到十分便捷的作用。但是在使用時需要注意一些安全問題。通過結合 createVNode API 的使用,我們可以更好地渲染動態 HTML 內容,使代碼更加健壯、安全。

原創文章,作者:PILP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138430.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PILP的頭像PILP
上一篇 2024-10-04 00:20
下一篇 2024-10-04 00:21

相關推薦

  • Python渲染HTML庫

    Python渲染HTML庫指的是能夠將Python中的數據自動轉換為HTML格式的Python庫。HTML(超文本標記語言)是用於創建網頁的標準標記語言。渲染HTML庫使得我們可以…

    編程 2025-04-29
  • Python編程實戰:用Python做網頁與HTML

    Python語言是一種被廣泛應用的高級編程語言,也是一種非常適合於開發網頁和處理HTML的語言。在本文中,我們將從多個方面介紹如何用Python來編寫網頁和處理HTML。 一、Py…

    編程 2025-04-28
  • HTML sprite技術

    本文將從多個方面闡述HTML sprite技術,包含基本概念、使用示例、實現原理等。 一、基本概念 1、什麼是HTML sprite? HTML sprite,也稱CSS spri…

    編程 2025-04-28
  • Python jinja2生成HTML

    Python jinja2是一個模板引擎,它可以幫助我們將數據和模板相結合生成HTML文件。在本文中,我們將詳細介紹如何使用Python jinja2生成HTML文件,包括安裝ji…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • HTML button詳解

    HTML是一種常見的網站前端語言,其中的標籤是比較常見的一個標籤。 一、htmlbutton居中 默認情況下,HTML按鈕會在頁面的左上角,想要居中需要使用css來設置按鈕的布局。…

    編程 2025-04-25
  • 詳解Thymeleaf HTML

    一、模板引擎介紹 Thymeleaf是一個XML/HTML模板引擎,可用於Web和非Web環境中。它是Spring框架的一部分,但也可以在非Spring應用程序中使用。 Thyme…

    編程 2025-04-25
  • HTML編寫登錄註冊頁面

    一、HTML做一個登錄註冊頁面簡約 簡約風格一直是大家喜歡的設計風格,下面我們就從簡約風格角度來看HTML如何編寫登錄註冊頁面。 一個簡約的登錄註冊頁面不需要複雜的線條和花哨的背景…

    編程 2025-04-25
  • 全方位解析fomer——無需編寫HTML表單的前端庫

    一、什麼是fomer? fomer是一個基於React的前端庫,可以方便地創建表單。使用它,你不需要編寫HTML表單,只需要使用JavaScript以及一些CSS類名即可創建美麗的…

    編程 2025-04-25
  • Android WebView載入本地HTML

    一、介紹 Android WebView是一個內置的瀏覽器,它允許開發人員在應用中嵌入網頁。使用WebView可以輕鬆地在應用程序中顯示本地或遠程的HTML內容。本篇文章將重點講述…

    編程 2025-04-24

發表回復

登錄後才能評論