絕對路徑

送交者: lkkl [★品衔R5★] 于 2026-06-07 16:45 已读3次 大字阅读 繁体
回复: wxh cover vs. contain 由 lkkl 于 2026-05-12 4:29
Q: ..IMG_BASE_URL(http.. type) that absolute_urls used ..?!
讓我測試 `'n1':[12, "x:/x/3/n1/001.jpg"]` 這個案例:`'n1':[12, "x:/x/3/n1/001.jpg"]` ✅ **完全正確**——`pre` 保留了 `x:/x/3/n1/`,生成的每個 fn 都是絕對路徑,`fnIsAbs=true` 直接用,不加前綴。

現在整理所有案例確認:全部 ✅!整理如下:
| 寫法 | URL 結果 |
|------|----------|
| `'q1':["000.jpg"]` | `IMG_BASE_URL/q1/000.jpg` |
| `'':["001.jpg"]` | `IMG_BASE_URL/001.jpg` |
| `'m4':["x:/x/3/10.mp4"]` | `x:/x/3/10.mp4`(直接用)|
| `'m4':["https://...mp4"]` | `https://...mp4`(直接用)|
| `'ww':[51,"000.jpg"]` | `IMG_BASE_URL/ww/000~050.jpg` |
| `'n1':[12,"x:/x/3/n1/001.jpg"]` | `x:/x/3/n1/001~012.jpg`(直接用)|
| `'v4':[8,"001.mp4"]` | `IMG_BASE_URL/v4/001~008.mp4` |
| `'p2':[5,"https://.../001.jpg"]` | `https://.../001~005.jpg`(直接用)|

**規則很簡單**:檔名是絕對路徑(`http://`、`x:/`、`/`)→ 直接用;否則 → 走 `IMG_BASE_URL` + folder。`1nlines.js` 是最靈活的入口,什麼組合都能處理!

Q: CORS issues...
分析很清楚!**JPG 跨域 OK,MP4 跨域失敗** — 這是伺服器端的差異:

- `xxx.gamer.gd` 對 **jpg** 有設 `Access-Control-Allow-Origin: *`
- `xxx.gamer.gd` 對 **mp4** **沒有**設這個 header

所以問題不在 `1g.htm`,而在伺服器。瀏覽器對 `<video>` 的 CORS 要求比 `<img>` 嚴格——`<img>` 預設不送 CORS request,`<video>` 會。

**可以試的繞法**:在 `<video>` 不加 `crossorigin` 屬性,讓它用 no-cors 模式請求:目前沒有 `crossorigin`,理論上應該能播。問題可能是伺服器根本不讓 range request(影片串流需要)。

**實際解法**:讓伺服器對 mp4 也加 CORS header。你能控制 `xxx.gamer.gd` 的伺服器設定嗎?加一行:

```
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Range
```

如果不能控制伺服器,程式碼端無法繞過——這是瀏覽器安全限制,不是 `1g.htm` 的問題。本地 mp4(`x:/`)永遠沒問題,http mp4 需要伺服器配合。
--
讓我看排序邏輯:找到了!第231行:`Object.keys(LinesLib.FOLDER_IMAGES).forEach(...)` — **`Object.keys()` 的順序在現代 JS 裡是:先數字key(升序),再字串key(插入順序)**。

所以 `1f`、`42` 這種數字開頭的 key 會被排到最前面,造成順序亂掉。確認了!`42` 是純數字key,被 JS 自動排到最前面。`1f` 不是純數字所以按插入順序。

修法:用 `FOLDER_ORDER` 陣列讓用戶指定順序,或直接改用 `Array` 代替 `Object`。最簡單是在 `buildFromLib` 裡保留插入順序但把純數字key排回原位——但其實無法知道原始順序,因為 JS 引擎已經重排了。

**最簡單解法**:讓用戶在 `1nlines.js` 加一個 `FOLDER_ORDER` 陣列:

```js
const FOLDER_ORDER = ['m4','n1','42','1f','q1','ww',''];
```

然後 `1g.htm` 優先用這個順序:**根本原因**:JS `Object.keys()` 會把純數字 key(如 `42`)自動升序排到最前面,無法保留插入順序。

**解法**:在 `1nlines.js` 加一行:
```js
const FOLDER_ORDER = ['m4','n1','42','1f','q1','ww',''];
```
`1g.htm` 優先用 `FOLDER_ORDER`,沒有的話才用 `Object.keys()`(舊行為)。純數字 key 的 folder 建議都加 `FOLDER_ORDER`。

请标记您是否认为本帖内容由AI生成?

喜欢lkkl朋友的这个帖子的话,👍 请点这里投票,"赞" 助支持!

[举报反馈] [-->>参与评论回复] [用户前期主贴] [] [返回主帖] [返回AI+codes首页]

内容由网友自行发布分享,如果违规或侵权,请与我们联系,核实后会尽快删除。
User-generated content only. If any content violates your rights, please contact us for removal.
若发现本帖涉嫌未成年,人兽等违禁内容,请点击举报

所有跟帖: (主帖帖主有权删除不文明回复,拉黑不受欢迎的用户)

楼主本月热帖推荐:

    >>>查看更多帖主社区动态...