javascript - 为什么chrome开发者工具中的缓存存储在离线模式下会变空

标签 javascript service-worker progressive-web-apps

我正在使用服务人员来缓存和获取文件。
这些文件在在线模式下被缓存,但是当我切换到离线模式时,chrome 开发者工具中的缓存存储是空的。我无法弄清楚问题所在。
任何帮助表示赞赏。

const cacheName = 'myCacheVersion1';
var filesToCache = [
    '/',
    '/service-worker/offline-page.html',
    '/service-worker/sw.js'
]

const offlineUrl = 'https://gmc-test.mytrah.com/service-worker/offline-page.html';

this.addEventListener('install', event => {
    event.waitUntil(
        caches.open(cacheName).then(function(cache){
            console.log(offlineUrl);
            return cache.addAll(filesToCache);
        })
            .then(() => self.skipWaiting())
    );
})

self.addEventListener('activate', function(e) {
    console.log('[ServiceWorker] Activate');
    e.waitUntil(
        caches.keys().then(function(keyList) {
            return Promise.all(keyList.map(function(key) {
                if (key !== cacheName) {
                    console.log('[ServiceWorker] Removing old cache', key);

                    return caches.delete(key);
                }
            }));

        })
    );
    return self.clients.claim();
});

this.addEventListener('fetch', event => {
    console.log(event.request);
    event.respondWith(
        fetch(event.request).catch(() => caches.match(event.request))
    )
});`

上面显示的是服务 worker 代码。
提前致谢

最佳答案

问题
我在为服务人员工作时遇到了类似的问题。当我将网络标记为离线时,缓存曾经从缓存存储中消失。发生这种情况的问题是因为我将 service worker 文件保存在 javascripts 中。文件夹。就像 OP 放置在 service-worker 中一样文件夹。现在上述导致范围问题。

使固定
因此,为了让您的服务人员工作(没有双关语),你需要将你的 service worker 文件移动到根目录 (在您这样做时强调安全性)。

文档
MDN引号:

The service worker will only catch requests from clients under the service worker's scope.

The max scope for a service worker is the location of the worker.


您还可以通过传递 scope 来设置范围注册 Service Worker 时的路径,例如
navigator.serviceWorker
  .register('/cache-worker.js', {
    scope: '/some-folder' 
    /* but again, you can never put your service worker inside a dir and 
       try to set a scope which is outside of the service worker dir. 
       It can always be at a lower level than where your service worker file resides..
  })

...

关于javascript - 为什么chrome开发者工具中的缓存存储在离线模式下会变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109971/

相关文章:

javascript - Angularjs,如何设置输入的 ng-model 以通过自动绑定(bind)更改日期和时间?

javascript - FCM 数据消息无法在 Firefox 中加载

javascript - 在初始化时将数据传递给 Service Worker js

javascript - PWA 路由和深度链接 SPA 或无 SPA、框架或无框架

google-chrome - Chrome DevTools 中缺少 "Add to homescreen"链接

javascript - 每 X 秒检查一次 IF 语句,然后运行代码一次

javascript - 按提交时表单不执行任何操作

javascript - 通过子级别的 XML 解析循环

javascript - 显示 Service Worker 状态的消息

progressive-web-apps - PWA 持久化存储最佳实践