以往我們要透過 JavaScript 取得網頁的 HTML 會使用 innerHTML() 的方法,不過這個方法會有一些安全性的問題,而近來 JavaScript 為 Element
介面新增了一個實用的方法——getHTML()
。這個方法提供了一種新的方式來獲取元素的 HTML 內容,與 innerHTML
類似,但提供了更強大的功能,例如支援 Shadow DOM 的序列化。
Element.getHTML() 的語法
let htmlString = element.getHTML(options);
參數:
-
options
(選擇):一個物件,包含以下屬性:-
serializableShadowRoots
(布林值):指定是否包含可序列化的 Shadow DOM,預設為false
。 -
shadowRoots
(陣列):指定要序列化的ShadowRoot
物件,即使它們是封閉的 Shadow DOM。
-
回傳值:
-
getHTML()
方法會回傳該元素的 HTML 字串。
序列化 Shadow DOM
對於具有 Shadow DOM 的自訂元件,getHTML()
允許開發者選擇是否序列化 Shadow DOM。
// 假設有一個自訂元素 let customElement = document.querySelector("my-custom-element"); // 獲取包含 Shadow DOM 的 HTML let htmlString = customElement.getHTML({ serializableShadowRoots: true }); console.log(htmlString);
此範例中,若 my-custom-element
內部包含 Shadow DOM,則 getHTML()
會將其內容一併序列化。
getHTML() vs. innerHTML
方法 | 支援 Shadow DOM | 讀取方式 |
---|---|---|
innerHTML |
否 | 只讀取標準 DOM 的內部 HTML |
getHTML() |
是(可選) | 可讀取標準 DOM 及可序列化的 Shadow DOM |
這意味著當處理 Web Components 或有 Shadow DOM 的元素時,getHTML()
是更好的選擇。
相容性與未來展望
目前 getHTML()
仍屬於較新的 API,因此在舊版瀏覽器可能無法支援。開發者應在使用前確認目標環境的相容性,或使用 innerHTML
作為回退方案。
let htmlString = element.getHTML ? element.getHTML() : element.innerHTML;
隨著 Web 技術的發展,getHTML()
有望成為未來 JavaScript 標準方法的一部分,為開發者提供更靈活的 HTML 讀取方式。
總結
-
getHTML()
是 JavaScriptElement
介面中的新方法。 -
提供比
innerHTML
更強大的功能,特別是對於 Shadow DOM。 -
目前支援度尚未普及,開發時應考慮相容性。
-
是未來 HTML 序列化的理想選擇。
對於希望更靈活處理 HTML 內容的開發者來說,getHTML()
無疑是一個值得關注的 API。