URL 擴充
RenderJS 為 URL.prototype 加入的請求、瀏覽紀錄與 query string 方法。
URL
原始碼:src/prototype/URL.ts
| 方法/屬性 | 說明 |
|---|---|
url.$queryAll |
解析後的 query string 物件 |
url.$image |
回傳預先載入該 URL 圖片的 Promise |
url.$$200(isImg = false) |
fetch 該 URL;若回應為圖片,轉換為 object-URL blob({ src, img }),除非是 SVG 且 isImg 為假 |
url.$req(body, once = false) |
fetch 封裝:JSON 或 FormData body(透過 body.json/body.files/body.tag)、自訂 header/credentials、以共用 Map(以 URL 為 key)去重請求、自動 JSON/文字回應解析,4xx/5xx 時以回應文字 reject |
url.$$query(key) |
searchParams.get(key) |
url._history(title?) |
對此 URL 執行 pushState,記錄至記憶體中的歷史堆疊,可選擇同步設定 document.title |
url._query(obj) |
回傳一個新 URL,將 obj 的鍵合併進現有 query string |
url.__history(title?) |
對此 URL 執行 replaceState(同步更新歷史堆疊) |
url.__query(obj) |
回傳一個新 URL,query string 整個由 obj 取代 |
url.query_(keys) |
回傳一個新 URL,移除指定的鍵(單一或陣列) |
url.query__() |
回傳一個新 URL,query string 已清空 |
範例
查詢字串方法回傳新的 URL;$req 依 Content-Type 解析回應,4xx/5xx 時以回應文字 reject。預覽在 location.origin 為 null 的 about:srcdoc 框架中執行,因此以 document.baseURI 解析路徑;一般頁面直接寫 "/llms.txt".$req() 即可。
<script>
const url = new URL("https://renderjs.pardn.io/docs?page=2&lang=en");
console.log(url.$queryAll, url.$$query("page"));
console.log(url._query({ sort: "asc" }).href);
console.log(url.__query({ q: "dom" }).href);
console.log(url.query_("lang").href);
console.log(url.query__().href);
new URL("/llms.txt", document.baseURI).$req()
.then((text) => console.log(text.split("\n")[0]))
.catch((err) => console.error(err));
new URL("/api/x", document.baseURI).$req({
method: "POST",
json: { key: "value" },
header: { "X-Token": "..." }
}).catch((err) => console.error("rejected:", String(err).length, "chars of response text"));
</script>