2026-03-03 01:51:31
构建支持离线路由的单页应用(SPA)需结合前端路由与Service Worker技术,通过缓存核心资源、拦截请求并处理离线状态,确保断网时核心功能可用。 以下是具体实现步骤:
1. 选择前端路由库并配置路由模式Hash模式(如#/about)无需服务器配置,直接由前端处理路由。
Browser模式需服务器将所有路由指向index.html,否则离线时可能返回404。
Service Worker是离线功能的核心,负责缓存资源、拦截请求并提供fallback页面。
安装阶段(install):预缓存HTML、JS、CSS等静态资源。const CACHE_NAME = 'my-app-v1';const urlsToCache = ['/', '/index.html', '/main.js', '/styles.css'];self.addEventListener('install', event => {
event.waitUntil(caches.open(CACHE_NAME).then(cache => {return cache.addAll(urlsToCache);}));});- 激活阶段(activate):清理旧缓存,避免版本冲突。```javascriptself.addEventListener('activate', event => {event.waitUntil(caches.keys().then(cacheNames => { return Promise.all( cacheNames.map(cacheName => { if (cacheName !== CACHE_NAME) { return caches.delete(cacheName); } }) );}));});```
event.respondWith(caches.match(event.request).then(response => {return response || fetch(event.request);}));});```
3. 预缓存路由对应的视图资源Nginx配置:location / { try_files $uri $uri/ /index.html;}
Apache配置:FallbackResource /index.html
通过结合前端路由(如React Router/Vue Router的Hash模式)与Service Worker缓存策略,并配置服务器路由回退,可实现SPA的离线支持。核心在于确保资源被正确缓存、请求被Service Worker拦截,并由前端路由处理视图渲染。同时,提供离线状态提示能显著提升用户体验。