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

PWA问题:更新Service Worker后空缓存

支洋
2023-03-14

我是PWA的新手,我在一个简单的项目上接受培训。在goole chrome上的第一次运行之后,一切都运行正常,我更改了服务工作人员中的cacheName常量和index.html中的标题,以测试所有站点资产的重新缓存。从这里开始,缓存仍然创建,但它是空的,我得到错误未捕获(在promise)TypeError:请求失败提到SW的行,我们const static CacheName='site-stest-v1'被声明。

这里是SW的代码:

const staticCacheName = 'site-static-v2';
const assets = [
    './',
    './index.html',
    './index.js',
    './main.js',
    './style.css',
    'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/css/ol.css',
    'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/build/ol.js',
    'https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4.js',
    'https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4-src.js'
];

// install service worker
self.addEventListener('install', evt => {
    console.log('service worker has been installed');
    evt.waitUntil( 
        caches.open(staticCacheName).then(cache => {
            console.log('caching shell assets');
            cache.addAll(assets);
        })
    );
   
});

// activate event
self.addEventListener('activate', evt => {
    console.log('service worker has been activated');
});

// fetch event
self.addEventListener('fetch', evt => {
    evt.respondWith(
        caches.match(evt.request).then(cacheRes => {
            return cacheRes || fetch(evt.request);
        })
    );
});

任何帮助都将不胜感激。

共有1个答案

宋嘉懿
2023-03-14

问题出在您的资产数组中。它只将URLpath带到要缓存的文件,而不是文件路径。简而言之,从这些路径的前面删除点。

const assets = [
    '/',
    '/index.html',
    '/index.js',
    '/main.js',
    '/style.css',
    'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/css/ol.css',
    'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/build/ol.js',
    'https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4.js',
    'https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4-src.js'
];

如果您将js和css文件存储在一个静态文件夹中, /static作为路由,那么您需要在其中存在的每个文件前面添加 /static。

我想再次指出,它只接受URLpath,而不接受FILEpath。它与您的文件路径无关。主要原因实际上是它从服务器缓存资产,而不是从您的计算机缓存资产。因此,它需要路由而不是文件路径。

 类似资料:
  • 场景是有一个主应用里面有多个子应用,其中a应用嵌入iframe(b应用)展示,可点击弹窗大屏展示; 问题1:a应用进来iframe展示操作没问题,但是点击大屏显示的时候控制台明明打印出来数据但是b应用页面没更新,使用强制刷新forceUpdate和局部刷新this.$nextTick都不好使,使用v-if也是初次进来有触发信息但是页面还是没有显示 问题2:c应用引入iframe(b应用),有复制和

  • 失败:生成失败,出现异常。 错误:任务“:firebase_core:compiledebugjavawithjavac”执行失败。 找不到tools.jar。请检查C:\Program Files\Java\JRE1.8.0_251是否包含有效的JDK安装。 更新后,我开始出现这样的错误。有人能帮忙吗?

  • 我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改? 我的服务人员。js: 我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?

  • 一、简介 当对PHPSSO进行修改后,执行此操作。 二、功能演示 更新应用列表缓存。如下图所示:

  • (在项目“Pods”的目标“TocropViewController”中)警告:在复制标头生成阶段跳过重复的生成文件:/users/vickky/documents/project1/ios/pods/tocropViewController/views/tocropViewController.h(在项目“Pods”的目标“TocropViewController”中)警告:在复制标头生成阶段跳

  • 在最新的Windows1803更新之后。我们面临着启动chromedriver的selenium脚本的问题。 如果脚本被放置为过夜执行,则在一段时间后脚本开始失败,webdriver除外 org.openqa.selenium.WebDriverExc0019:等待驱动服务器启动超时 下面是使用的依赖项版本 Selenium:3.141 Chromedriver:2.46 Chrome版本:72