# 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 已清空 |

## 範例

```javascript
const result = await "/api/x".$req({
    method: "POST",
    json: { key: "value" },
    header: { "X-Token": "..." }
});
```
