无法直接获取精确剩余容量与配额上限,因浏览器出于隐私安全不暴露真实数值;只能通过 navigator.storage.estimate() 获取 usage 和 quota 的估算值,二者均为近似值且 quota 可能远高于实际可用空间。

目前无法直接通过 StorageManager 查询精确的剩余容量与配额上限数值,因为浏览器出于隐私和安全考虑,**不暴露真实磁盘用量和硬性配额数字**。但可以使用 navigator.storage.estimate() 获取估算值(总配额与已用空间),这是最接近需求的标准方法。
使用 estimate() 获取存储使用情况估算
estimate() 返回一个 Promise,解析为包含 usage(已用字节数)和 quota(浏览器分配的估算配额字节数)的对象。注意:这两个值都是近似值,且 quota 可能远高于实际可用空间(例如 Chrome 中可能返回 TB 级数值,但实际受磁盘、策略限制)。
示例代码:
if ('storage' in navigator && 'estimate' in navigator.storage) {
navigator.storage.estimate().then(estimate => {
console.log('已用空间:', estimate.usage, 'bytes');
console.log('估算配额:', estimate.quota, 'bytes');
if (estimate.quota) {
const usedPercent = ((estimate.usage / estimate.quota) * 100).toFixed(2);
console.log(`已用 ${usedPercent}%`);
}
}).catch(err => {
console.error('获取存储信息失败:', err);
});
} else {
console.warn('当前浏览器不支持 StorageManager.estimate()');
}
注意兼容性与权限前提
该 API 在现代浏览器中基本可用(Chrome 61+、Firefox 56+、Edge 79+、Safari 14.1+),但有重要前提:
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
立即学习“前端免费学习笔记(深入)”;
- 必须在安全上下文中运行(即 HTTPS 或
localhost); - 部分浏览器(如 Safari)要求用户已与站点有交互(如点击)后才允许访问;
- 若页面处于隐身/无痕模式,
quota可能为0或极小值,usage也可能不准; - 调用前建议先检查
navigator.storage.persisted()判断是否已获得持久化存储权限(非必需但有助于理解配额稳定性)。
无法获取“剩余容量”的原因与替代思路
浏览器故意不提供 quota - usage 的精确剩余值,主要防止指纹追踪(通过反复写入并观察配额变化可推断设备类型、磁盘状态等)。因此:
- 不要尝试用
estimate().quota - estimate().usage计算“剩余”并用于关键逻辑; - 若需管理缓存,建议采用主动策略:比如设定目标缓存大小(如 50MB),定期清理旧数据,而非依赖剩余空间判断;
- 对大文件写入,应捕获
QuotaExceededError异常,并降级处理(如压缩、分片或提示用户)。
验证持久化存储(影响配额稳定性)
调用 navigator.storage.persist() 可请求将存储设为“持久化”,从而降低被浏览器自动清除的风险(尤其在存储紧张时)。这虽不改变配额数值,但会影响长期可用性:
// 请求持久化(返回 Promise)
navigator.storage.persist().then(persisted => {
if (persisted) {
console.log('已获得持久化存储权限');
} else {
console.log('用户拒绝或浏览器未授予持久化权限');
}
});


















