html5静态网页如何设置缓存_离线应用manifest用法【教程】
发布时间 - 2026-01-01 00:00:00 点击率:次HTML5 manifest 已被所有主流浏览器彻底弃用,因其依赖存在严重缺陷的 AppCache 机制;W3C 标记为 obsolete,WHATWG 标准已删除;替代方案唯一可行的是 Service Worker + Cache API,需 HTTPS 环境、两次刷新生效,并精细管理缓存版本。
HTML5 的 manifest 已被现代浏览器彻底弃用,不能用于新项目。Chrome 从 94 版本起移除支持,Firefox 85+、Safari 早已禁用,所有主流浏览器均返回 DOMException: Failed to set t 或直接忽略
he 'manifest' property on 'HTMLDocument'。
manifest 文件为什么完全失效了
它依赖过时的 AppCache 机制,存在严重设计缺陷:缓存更新不透明、资源失败导致整个缓存失效、无法按需更新单个文件、HTTPS 下行为不一致等。W3C 已将其标记为 obsolete,WHATWG HTML 标准中已删除该章节。
- 访问含
manifest属性的页面时,开发者工具 Network 面板不再显示manifest请求 -
navigator.onLine和window.applicationCache在新版本浏览器中为undefined - 即使服务端返回正确的
text/cache-manifestMIME 类型,浏览器也完全不解析
替代方案:Service Worker + Cache API 是唯一可行路径
离线能力必须通过 Service Worker 实现,它支持精细控制缓存策略、版本化更新、后台同步等。
- 必须在 HTTPS(或
localhost)环境*册,http://域名下会静默失败 - 注册代码必须放在主页面的 JS 中,且不能在模块脚本(
type="module")里直接调用navigator.serviceWorker.register() - 首次注册后,页面需**刷新两次**才能生效:第一次注册 SW,第二次才由 SW 控制页面
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log('SW registered: ', reg.scope))
.catch(err => console.error('SW registration failed: ', err));
});
}
静态网页最小可行离线缓存示例(sw.js)
以下 sw.js 仅缓存 HTML、CSS、JS、字体和图片,适用于纯静态站点,不处理动态请求或 API。
立即学习“前端免费学习笔记(深入)”;
- 使用
cache.addAll()预缓存关键资源,避免首次离线白屏 -
fetch事件中优先匹配缓存,未命中再发网络请求(stale-while-revalidate策略) - 每次更新
sw.js文件内容(如改注释),浏览器才会触发新版本安装
const CACHE_NAME = 'static-v1';
const FILES_TO_CACHE = [
'/',
'/index.html',
'/style.css',
'/script.js',
'/assets/logo.png'
];
self.addEventListener('install', (e) => {
e.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(FILES_TO_CACHE))
);
});
self.addEventListener('fetch', (e) => {
e.respondWith(
caches.match(e.request)
.then(response => response || fetch(e.request))
);
});
真正棘手的是缓存版本管理与更新逻辑——比如如何让用户感知新版本可用、是否自动刷新页面、第三方资源(如 CDN 字体)能否缓存,这些细节没处理好,离线体验反而更差。
# css
# html
# js
# go
# html5
# 浏览器
# app
# 工具
# safari
# ai
# win
# cdn
# 为什么
# red
# firefox
# chrome
# while
# register
# Property
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
,南京靠谱的征婚网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
魔方云NAT建站如何实现端口转发?
EditPlus中的正则表达式 实战(2)
Laravel中的Facade(门面)到底是什么原理
js实现获取鼠标当前的位置
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
如何在Windows虚拟主机上快速搭建网站?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Java解压缩zip - 解压缩多个文件或文件夹实例
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Python3.6正式版新特性预览
Android中AutoCompleteTextView自动提示
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Swift开发中switch语句值绑定模式
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
北京网站制作的公司有哪些,北京白云观官方网站?
如何用IIS7快速搭建并优化网站站点?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
java中使用zxing批量生成二维码立牌
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何快速搭建虚拟主机网站?新手必看指南
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
如何用已有域名快速搭建网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
简单实现Android文件上传
JavaScript实现Fly Bird小游戏
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何生成腾讯云建站专用兑换码?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
香港服务器WordPress建站指南:SEO优化与高效部署策略
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
黑客如何利用漏洞与弱口令入侵网站服务器?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
iOS中将个别页面强制横屏其他页面竖屏
Laravel如何实现本地化和多语言支持?(i18n教程)
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化

