htmx Head 標籤支援擴充功能

head-support 擴充功能為 htmx 請求的回應增加對 head 標籤 的支援。

htmx 最初是一個專注於在 body 標籤內部分替換 HTML 的函式庫。因此,合併額外資訊(例如 head 標籤)並非該函式庫的重點。(這與例如 TurboLinks 不同,TurboLinks 專注於將通過 AJAX 檢索的整個網頁合併到瀏覽器中。)

hx-boost 屬性使 htmx 更接近完整 HTML 文件支援的世界,並且最終增加了從 head 元素中提取 title 標籤的支援,但完整的 head 標籤支援從未成為該函式庫的功能。此擴充功能解決了這個缺點。

安裝

<script src="https://unpkg.com/htmx-ext-head-support@2.0.1/head-support.js"></script>

使用方式

<body hx-ext="head-support">
...
</body>

安裝此擴充功能後,所有 htmx 接收到的包含 head 標籤的回應(即使它們不是帶有根 <html> 元素的完整 HTML 文件)都將被處理。

head 標籤的處理方式取決於 htmx 請求的類型。

如果 htmx 請求來自被提升(boosted)的元素,則會使用以下合併演算法

如果 htmx 請求來自未被提升的元素,則所有內容都將附加到現有的 head 元素中。

如果您希望在任何一種情況下覆蓋此行為,您可以在新的 <head> 標籤上放置 hx-head 屬性,並使用以下兩個值之一

控制合併行為

除此之外,您也可以使用以下屬性控制個別元素的合併行為

範例

舉例來說,考慮現有文件中以下 head 標籤

<head>
<link rel="stylesheet" href="https://the.missing.style">
<link rel="stylesheet" href="/css/site1.css">
<script src="/js/script1.js"></script>
<script src="/js/script2.js"></script>
</head>

如果 htmx 收到包含這個新 head 標籤的請求

<head>
<link rel="stylesheet" href="https://the.missing.style">
<link rel="stylesheet" href="/css/site2.css">
<script src="/js/script2.js"></script>
<script src="/js/script3.js"></script>
</head>

然後將發生以下操作

最終的 head 元素將如下所示

<head>
<link rel="stylesheet" href="https://the.missing.style">
<script src="/js/script2.js"></script>
<link rel="stylesheet" href="/css/site2.css">
<script src="/js/script3.js"></script>
</head>

事件

此擴充功能會觸發以下事件