网页应用应通过 navigator.storage.estimate() 在安全上下文及用户交互后异步估算存储使用率,关注 usage/quota 比值(>0.85 为高风险),结合 persist() 提升配额稳定性,并用轮询+比值变化检测实现动态感知。

网页应用无法直接使用 QuotaManagement API(这是 Azure 专属的 REST 管理接口,需 AAD 认证、RBAC 权限和管理平面调用),但可以通过浏览器原生的 Storage Manager API(即 navigator.storage.estimate())实时感知本地存储配额的动态变化趋势。关键在于理解它不是“管理配额”,而是“估算使用状态”,且行为高度依赖上下文。
以下是你真正能落地的操作方式:
必须在安全上下文中异步调用 estimate()
该方法仅在 HTTPS 或 localhost 环境下可用。非安全上下文会令 navigator.storage 为 undefined,直接报 TypeError。不能在页面加载初期(如 DOMContentLoaded 前)就执行——建议绑定到用户首次交互(如按钮点击、输入框聚焦)后触发,避免 Chrome 返回 quota: 0 的无效值。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
解析 usage / quota 比值,而非绝对数值
usage 是当前 origin 所有持久化存储(IndexedDB、Cache API、localStorage 压缩后总和)的估算占用量;quota 是浏览器根据空闲磁盘、内存、用户活跃度等动态计算的软上限,不是精确配额。Chrome 桌面可能返回 GB 级,Android WebView 可能仅几百 MB,Safari 17.5 仍返回 {usage: 0, quota: 0}。因此:
- 不要用
quota - usage判断还能写入多少字节 - 应关注比值:
usage / quota > 0.85表示高风险,可提前清理缓存或提示用户 - 隐身模式下配额受限(Chrome 约 128–1500 MB),且
usage可能为 0,需单独处理
结合 persist() 提升配额稳定性
对 PWA 或需长期缓存的应用,主动请求持久化权限可显著改善 quota 的可信度:
- 调用
navigator.storage.persist(),用户授权后,Chrome 通常返回更高、更稳定的quota值 - 即使拒绝,也应继续调用
estimate()获取当前usage,用于基础监控 - 持久化不等于无限配额,只是提升浏览器信任等级,减少被自动清理的风险
实现轻量级轮询与状态响应
虽然 estimate() 不是实时事件流,但可通过定时轮询模拟“动态感知”:
- 首次调用后,设置
setInterval(() => navigator.storage.estimate(), 5000) - 每次成功返回后,对比前一次比值变化:若
usage / quota上升超过 5%,触发 UI 更新(如进度条变色) - 监听
storage事件(仅对同源其他 tab 的 localStorage/sessionStorage 变更有效),作为辅助信号

















