【发布时间】:2020-02-13 08:18:27
【问题描述】:
我已将我的 Angular 应用程序转换为 PWA。 Angular Service Worker 完成其工作并缓存静态资源,以便在离线时加载应用外壳。
现在,我还想缓存 POST 请求,这些请求将在设备重新联机后立即发送。不幸的是,Angular Service Worker 不支持 GET 和 HEAD 以外的 HTTP 方法。因此,我使用的是 Google 的工作箱库。
按照官方的“基本用法”sn-p [1],我使用了 workbox.backgroundSync.Plugin() 并定义了要缓存的路由:
sw.js:
importScripts('ngsw-worker.js');
importScripts('https://storage.googleapis.com/workbox-cdn/releases/4.0.0/workbox-sw.js')
console.log(`Yay! Workbox is loaded ????`);
const bgSyncPlugin = new workbox.backgroundSync.Plugin('http-queue');
workbox.routing.registerRoute(
/.*/,
new workbox.strategies.NetworkOnly({plugins: [bgSyncPlugin]}),
'POST'
);
track.service.ts:
addTrack(track: Track): Observable<Track> {
return this.http.post<Track>(`https://backend/track`, track);
}
Workbox 已加载,但在离线时执行 POST 请求时,不会创建 IndexedDB。使用 Fetch API 而不是 Angular HTTP 客户端也不起作用。
[1]https://developers.google.com/web/tools/workbox/modules/workbox-background-sync
【问题讨论】:
标签: angular progressive-web-apps workbox background-sync