怎麼查 OPFS 裡有哪些檔案
OPFS 在 Finder 裡看不到(見 OPFS 不在使用者的檔案系統裡,所以快,也所以找不到),只能問瀏覽器。
最可靠:在該網站的 Console 跑
跨瀏覽器都能用,不依賴任何工具:
const walk = async (dir = await navigator.storage.getDirectory(), path = '') => {
for await (const h of dir.values()) {
const p = `${path}/${h.name}`;
if (h.kind === 'file') {
const f = await h.getFile();
console.log(`📄 ${p} ${f.size} bytes ${new Date(f.lastModified).toLocaleString()}`);
} else {
console.log(`📁 ${p}/`);
await walk(h, p);
}
}
};
await walk();沒輸出就是空的——OPFS 預設是空目錄。
圖形介面
先看 DevTools → Application 面板有沒有內建的檔案系統項目;沒有的話裝 OPFS Explorer Chrome 擴充功能,DevTools 會多一個分頁,可以看階層、點檔名把檔案存到真正的檔案系統、點垃圾桶刪除。
Safari 和 Firefox 沒有對應的擴充功能,所以上面那段 script 才是通用解。
兩個前提,搞錯就會看到空的
① OPFS 綁 origin,Console 必須連在那個頁面上。
https://example.com/a ┐
https://example.com/b ┘ 同一份
https://app.example.com ← 完全不同的一份(子網域也算不同 origin)
② 跨來源 iframe 有自己的一份。 要查的東西如果是某個嵌入的 iframe 寫的,DevTools Console 的執行環境要先切到那個 iframe。
清空
await (await navigator.storage.getDirectory()).remove({ recursive: true });會直接刪光,沒有確認。 remove() 目前是 Chrome 實作的(可用 'remove' in FileSystemFileHandle.prototype 偵測),其他瀏覽器要用 removeEntry() 逐個刪。