location.reload(true)在现代浏览器中已被废弃,true参数无效;应改用带时间戳的location.href跳转(如location.href += '?t=' + Date.now())强制全新请求,但无法清除Service Worker、Cache API或localStorage。

点击按钮强制刷新并跳过缓存
浏览器缓存不是靠 JS 能“一键清空”的,所谓“清除缓存按钮”本质是绕过缓存重新加载页面或资源。最直接有效的方式是强制发起一次全新的 GET 请求,让浏览器不走缓存。
- 用
location.reload(true)会强制从服务器重新获取 HTML(但部分浏览器已忽略true参数,行为不可靠) - 更稳妥的是带时间戳跳转:
location.href = location.href + (location.href.includes('?') ? '&' : '?') + 't=' + Date.now() - 注意:这不会清掉 Service Worker 缓存、Cache API 或 localStorage,仅影响当前页面的 HTML 加载路径
JS 能清理哪些缓存?各方法的实际效果
JS 权限有限,只能操作自己写入的存储层,不能碰浏览器 HTTP 缓存或磁盘级缓存。常见可清理项及对应 API:
-
localStorage.clear()和sessionStorage.clear():立即生效,清空键值对 -
caches.keys().then(keys => Promise.all(keys.map(key => caches.delete(key)))):删除所有 Cache API 缓存(需 HTTPS 或 localhost) -
navigator.serviceWorker.getRegistrations().then(regs => Promise.all(regs.map(r => r.unregister()))):注销 Service Worker(后续请求不再拦截,但已缓存资源仍存在) -
indexedDB.databases()不提供全局清库 API,需遍历数据库名后用indexedDB.deleteDatabase(name)
为什么 document.cookie = '' 不等于“清 Cookie”
设置 document.cookie 为空字符串完全无效——Cookie 是按 domain/path/secure 等属性逐条设置的,必须显式覆盖每一条。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 正确做法是读取
document.cookie解析出所有 key,再对每个 key 执行document.cookie = 'key=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/' - 注意:第三方域名 Cookie、HttpOnly Cookie 无法通过 JS 删除
- 如果页面在 iframe 中且跨域,
document.cookie读写会被拒绝,控制台报SecurityError
用户点一次“清缓存”,到底发生了什么?
真实场景中,“一键清理”按钮往往组合多个动作,但必须分清优先级和失败回退:
立即学习“前端免费学习笔记(深入)”;
- 先尝试
caches.delete(),失败则忽略(比如未注册 Cache API) - 再调用
localStorage.clear(),这个几乎总能成功 - Service Worker 注销建议延后执行(避免当前页脚本突然失效),可用
setTimeout(() => {...}, 100) - 最后跳转带时间戳的 URL,确保下次打开是全新 HTML
- 不要试图用
fetch('/xxx', { cache: 'reload' })清理其他页面资源——它只对本次 fetch 生效,且无法覆盖已加载的 script/css
真正难处理的是第三方 SDK 写入的缓存(比如 Sentry、微信 JS-SDK),它们可能用 private field 或闭包存状态,JS 层面无法触达。这类情况只能靠刷新页面+禁用持久化逻辑来缓解。


















