当前位置: 首页 > 知识库问答 >
问题:

如何使用service worker获取json数据并更新应用程序外壳

贲宏硕
2023-03-14

我已经通过ServiceWorker注册、激活和缓存了资源,现在我想知道如何使用ServiceWorker获取JSON数据和更新应用程序外壳。

我已经通过ServiceWorker注册、激活和缓存了资源,现在我想知道如何使用ServiceWorker获取JSON数据和更新应用程序外壳。

var CACHE_NAME = 'my-cache-v1'; 
var urlsToCache = [
 
  '/common.css',
  '/common.js'
  
];

self.addEventListener('install', function (e) {
    console.log('[Service Worker] Install');
    e.waitUntil(
      caches.open(CACHE_NAME).then(function (cache) {
          console.log('[Service Worker] Caching app shell');
          return cache.addAll(urlsToCache);
      }).then(function(e){
        return self.skipWaiting();
      })
    );
});
self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Cache hit - return response
        if (response) {
          return response;
        }
      
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Check if we received a valid response
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

             var responseToCache = response.clone();

            caches.open(CACHE_NAME)
              .then(function(cache) {
                cache.put(event.request, responseToCache);
              });

            return response;
          }
        );
      })
    );
});

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 !== CACHE_NAME) {
          console.log('[ServiceWorker] Removing old cache', key);
          return caches.delete(key);
        }
      }));
    })
  );
  return self.clients.claim();
});

共有1个答案

云德辉
2023-03-14

要效仿的一个例子是https://github.com/GoogleChrome/sw-precache/tree/master/app-shell-demo

它在一个构建过程中集成了sw-preache,以保持App Shell资源(超文本标记语言、JS、CSS)是最新的。

它使用运行时缓存(通过对sw工具箱的依赖)来保持JSON API响应和图像的缓存。

它基于一个稍微过时的React/react-router/react-redux版本,但一般原则仍然适用。

 类似资料:
  • 问题内容: 因此,我有一个返回jSON对象的链接,我需要对其进行解码并将其放入PHP中的变量中。 网址 这是它返回的对象 我真的只对 最后是消息 那么,如何提取jSON对象并将其放入PHP中可以稍后使用的正确变量中? 变量,如:,,,,,等。 我只需要知道如何检索jSON对象,然后将数据提取到PHP中的变量中即可。 我现在可以获取PHP数组,但是在调用正确的值时遇到了一些麻烦。这是数组。 自从我们

  • 所以我有一个返回jSON对象的链接,我需要对它进行解码并将其放入PHP中的变量中。 URL 这是它返回的对象 我真的只对 最后是信息 那么,我如何提取jSON对象并将其放入PHP中以更正我以后可以使用的变量呢? 像这样的变量:,,,,,等等。 我只需要知道如何检索jSON对象,然后将数据提取到PHP中的变量中。 我现在能够获得PHP数组,但是调用正确的值时遇到了一些问题。这是数组。 数组([计数]

  • 如果1要更新应用程序,请从控制台执行操作。。1.单击部署。2.选择应用程序名称并单击更新选项。3、在这里,他可以改变: 现在在我的应用程序中没有指定计划路径,所以要更新应用程序,我只更改源路径。应用程序已成功更新。 我想通过提供新的源路径,使用wlst命令更新应用程序。有可能吗? 喜欢 updateApplication('backoffice','path\ to\ the\ ear\ file

  • 问题内容: 我是angular.js的新手,在看似简单的任务上遇到了一些麻烦。 我需要从网站上的json文件中获取下面的json,然后将键(英语,西班牙语等)放入我的html文件中的标签标记中,然后加载其对应的值(0、1、3、2、1 )转换成html范围输入。 json文件包含: 加载json后产生的html应该如下所示: 最后,我想在表单上单击“保存”,并在json文件上在线更新相应键的值。 生

  • 问题内容: 我正在将以下JSON字符串发送到我的服务器。 在服务器上,我有这个。 当我发送字符串时,它表明我得到了200的响应,但是其他两种方法从未运行。这是为什么? 问题答案: 我认为您正在将对象的使用与的使用混为一谈。 该对象用于将HTTP响应发送回调用方客户端,而您想访问的正文。请参阅此答案,它提供了一些指导。 如果您使用的是有效的JSON并通过进行发布,则可以使用中间件解析请求正文并将结果

  • 我正在向服务器发送以下JSON字符串。 我在服务器上有这个。 当我发送字符串时,它显示我得到了一个200的响应,但是那些其他两个方法从来没有运行过。这是为什么?