微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

服务工作者,用于缓存脱机文件

如何解决服务工作者,用于缓存脱机文件

我们希望使网站可以脱机使用,我们从App Cache开始,但发现Service Worker已停止使用它。

我在我创建的测试站点上找到了设置服务工作者的帮助,但是它似乎仍然无法正常工作。它注册了服务工作者等,但似乎没有缓存任何东西。

这是服务工作者js的代码。有什么想法吗?

js代码的屏幕截图

1

解决方法

尝试一下:

  1. 加载Service Worker页面。

    if(navigator.serviceWorker){
       window.addEventListener('load',() => {
         navigator.serviceWorker
         .register('/sw.js')
         .then(console.log('[ServiceWorker] Registered Successfully'))
         .catch(err => console.log(`[ServiceWorker] Error: ${err}`));
        });
    } else {
        console.log('Service Worker not supported.');
    }
    
  2. 在sw.js中,添加一个版本。

    const cacheName='cache-2020.10.06-01';
    
  3. 在sw.js中,添加了fetch事件。

    self.addEventListener('fetch',(event) => {
      event.respondWith(async function() {
    
        const cache = await caches.open(cacheName);
        const cachedResponse = await cache.match(event.request);
        const networkResponsePromise = fetch(event.request);
    
        event.waitUntil(async function() {
          const networkResponse = await networkResponsePromise;
          await cache.put(event.request,networkResponse.clone());
        }());
    
        // Returned the cached response if we have one,otherwise return the network response.
        return cachedResponse || networkResponsePromise;
      }());
    });
    

这基本上可以满足您的要求。就我个人而言,如果我所请求的内容尚未缓存并且没有网络访问权限,则尝试通过显示脱机页面来使其更进一步。但是到目前为止,我尝试过的所有示例都未能证明该功能。我认为自编写这些示例以来,API中的某些内容可能已发生变化。

GL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?