无法直接获取“已占用存储百分比”,因 navigator.storage.estimate() 的 quota 是动态估算值而非真实总容量,仅能计算相对参考百分比(usage / quota × 100),并据此在 ≥85% 时触发缓存清理等策略。

无法直接通过 navigator.storage.estimate() 获取“已占用存储百分比”,因为该 API 不提供总容量的准确值(尤其在 Chrome、Edge 等浏览器中,quota 返回的是启发式估算值,非真实磁盘上限),且不同浏览器行为差异大。但你可以用它获取当前使用量和配额估算值,再计算一个**相对参考百分比**,并结合策略触发清理逻辑。
理解 estimate() 的返回值含义
navigator.storage.estimate() 返回一个 Promise,resolve 一个对象:
- usage:当前域名已使用的存储字节数(较可靠,包含 Cache API、IndexedDB、Service Worker 缓存、localStorage 等持久化/半持久化存储)
- quota:浏览器为该源分配的**估算配额上限(字节)** —— 注意:这不是设备总空间,也不是固定值,会动态变化(如根据磁盘空闲率、用户活动、是否登录账号等调整)。Chrome 中常为几百 MB 到几 GB 不等;Safari 和 Firefox 表现更保守或不支持 quota。
计算参考百分比(非精确,但可作阈值依据)
仅当 quota > 0 且 usage >= 0 时,可安全计算:
const { usage, quota } = await navigator.storage.estimate();
const percent = quota ? Math.round((usage / quota) * 100) : 0;
例如:usage = 420_000_000(≈420MB),quota = 2_100_000_000(≈2.1GB)→ percent ≈ 20%。这个值可用于判断是否接近浏览器“软限制”。
设置合理阈值并触发清理动作
不要等到 100% —— 浏览器通常在 80%~95% 区间就开始限制新写入或触发自动回收。建议:
- ≥ 75%:记录日志,提示用户可能影响性能
- ≥ 85%:主动清理低优先级缓存(如过期图片、临时 API 响应)
- ≥ 95%:执行保守清理(保留核心数据,清空非关键 IndexedDB objectStore、Cache API 中非关键请求)
示例逻辑:
async function checkAndCleanIfFull() {
try {
const { usage, quota } = await navigator.storage.estimate();
if (!quota || quota === 0) return;
<pre class="brush:php;toolbar:false;">const percent = Math.round((usage / quota) * 100);
if (percent <p>} catch (err) {
console.warn('Storage estimate or cleanup failed:', err);
}
}
</p>注意事项与替代建议
⚠️ 关键限制:
- 该 API 在非安全上下文(HTTP)中不可用,必须 HTTPS
- Safari 目前不支持
navigator.storage.estimate()(返回空 Promise 或抛错) - 无法区分 localStorage / IndexedDB / Cache 各自用量,只能得到总量
- 不能强制释放系统级资源,清理仍需你调用具体 API(
caches.delete、IDBDatabase.clear()等)
✅ 更稳健的做法:
- 对所有写入操作做大小预估 + 计数,维护应用层存储水位(如:每次存图片前检查本地累计大小)
- 使用
navigator.storage.persisted()判断是否已获得持久化权限,配合persist()请求提升配额稳定性 - 清理前向用户轻量提示(尤其涉及用户生成内容时),避免误删










