【发布时间】:2017-12-31 18:33:19
【问题描述】:
我正在使用服务人员为我的单页网络应用程序引入离线功能。这非常简单 - 在可用时使用网络,如果没有,请尝试从缓存中获取:
service-worker.js:
self.addEventListener("fetch", event => {
if(event.request.method !== "GET") {
return;
}
event.respondWith(
fetch(event.request)
.then(networkResponse => {
var responseClone = networkResponse.clone();
if (networkResponse.status == 200) {
caches.open("mycache").then(cache => cache.put(event.request, responseClone));
}
return networkResponse;
})
.catch(_ => {
return caches.match(event.request);
})
)
})
因此它会拦截所有 GET 请求并缓存它们以供将来使用,包括初始页面加载。
在 DevTools 中切换到“离线”并在应用程序的根目录处刷新按预期工作。
但是,我的应用使用 HTML5 pushstate 和客户端路由器。用户可以导航到新路由,然后下线,然后点击刷新,将收到“无互联网”消息,因为服务工作者从未被告知此新 URL。
我想不出办法。与大多数 SPA 一样,我的服务器被配置为为许多包罗万象的 URL 提供 index.html。我需要为服务人员提供某种类似的行为。
【问题讨论】:
标签: javascript html service-worker