JavaScript 无法直接清除浏览器缓存,仅能操作 localStorage/sessionStorage(如 clear() 或 removeItem()),绕过 HTTP 缓存需加时间戳或请求头,Service Worker 缓存须在 SW 中管理,DNS、磁盘缓存等则完全不可控。

JavaScript 中的 BOM(Browser Object Model)本身不提供直接清除浏览器缓存(如 HTTP 缓存、DNS 缓存、Service Worker 缓存、localStorage/sessionStorage 等)的 API。所谓“清除缓存”,实际需根据缓存类型,调用不同机制,并且多数操作受限于浏览器安全策略,无法完全由 JS 主动强制清空系统级缓存(如磁盘 HTTP 缓存)。
清除 localStorage 和 sessionStorage
这两类是前端可直接控制的客户端存储,属于 BOM 的一部分(通过 window.localStorage / window.sessionStorage 访问):
-
清空全部:调用
localStorage.clear()或sessionStorage.clear() -
删除指定键:用
localStorage.removeItem('key') - 注意:这些操作仅影响当前源(协议+域名+端口),且不会触发浏览器 HTTP 缓存刷新
绕过 HTTP 缓存(强制重新请求资源)
虽然不能“清除”已存的 HTTP 缓存,但可通过添加唯一查询参数或设置请求头,让浏览器跳过缓存,发起新请求:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 动态加载脚本/CSS 时加时间戳:
<script src="app.js?v=1698765432"></script> - AJAX 请求中设置
cache: false(jQuery)或手动加随机参数:fetch('/data.json?t=' + Date.now()) - 使用
Cache-Control: no-cache或max-age=0响应头(需服务端配合)
控制 Service Worker 缓存
若网站注册了 Service Worker,其缓存(如通过 cache.put() 存储)需在 SW 脚本中主动管理:
立即学习“Java免费学习笔记(深入)”;
- 在 SW 的
activate事件中调用cache.delete()清理旧缓存 - 主页面可通过
navigator.serviceWorker.ready获取注册实例,再 postMessage 触发清理逻辑 - 也可调用
navigator.serviceWorker.unregister()卸载 SW(连带清除其控制的缓存)
无法通过 JS 清除的缓存类型
以下缓存不由 JavaScript 控制,BOM 无对应接口,用户需手动操作或依赖浏览器策略:
- DNS 缓存:JS 无法访问或清空,通常由系统或浏览器自动维护,寿命较短
-
HTTP 磁盘/内存缓存:浏览器内部机制,JS 无法强制清除;可借助
location.reload(true)尝试强制刷新(部分浏览器已弱化该行为) - 浏览器自动填充/密码保存:属隐私数据,受严格限制,JS 不可读写或清除

















