服务工作线程不从缓存返回文件

2024-01-28

我正在尝试使用 Service Worker 缓存单页 Web 应用程序。它应该从缓存中获取所有文件,并仅在发布新的服务工作线程版本时更新该缓存。

使用预缓存功能,我将一些文件写入缓存,如下所示:

function precache() {
return caches.open(CACHE).then(function(cache) {
    return cache.addAll([
        'index.html',
        'js/script.js',
        'img/bg.png',
        'img/logo.svg',
        ...
    ]);
});
}

(我尝试过在路径之前使用或不使用“/”进行缓存,甚至使用绝对路径进行缓存。没有区别)

在 Chrome 的缓存存储中,所有这些文件的内容都准确无误。但是,当我尝试在重新加载页面时从缓存中提供文件时,没有一个请求与缓存匹配,它们都被拒绝,即使我仍然在线。

self.addEventListener('fetch', function(evt) {
    evt.respondWith(
        caches.match(evt.request).then(function(response) {
            if(response){
                return response;
            } else {
                reject('no result');
            }
        }).catch(function(){
            if(evt.request.url == 'https://myurl.com'){
                return caches.match('/index.html');
            }
        });
    )
});

catch 函数中的 index.html 得到正确服务,并依次请求其他文件,例如 /js/script.js。这些请求在控制台中显示如下:

请求 { 方法: 'GET', url: 'https://myurl.com/js/script.js https://myurl.com/js/script.js',...引荐来源:'https://myurl.com https://myurl.com' }

但他们没有返回响应,只显示这样的通知:

的 FetchEvent 为“https://myurl.com/js/script.js https://myurl.com/js/script.js" 导致网络错误响应:一个不是 Response 的对象被传递给 respondWith()。

我在这里错过了什么吗?


感谢拉吉特的链接https://developer.mozilla.org/en-US/docs/Web/API/Cache/match https://developer.mozilla.org/en-US/docs/Web/API/Cache/match我发现caches.match()函数接受一个选项对象。

我已将我的服务人员中的该行更新为

caches.match(evt.request,{cacheName:CACHE,ignoreVary:true}).then(function(response) {

因此它包含缓存名称并忽略 VARY 标头匹配,现在它返回正确的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务工作线程不从缓存返回文件 的相关文章

随机推荐

  • 创建一个可以在以后单击同一按钮时添加的可变数组?

    一般菜鸟问题 1 如何创建一个NSMutable数组在一个buttonClicked我可以在随后单击同一按钮时添加更多条目的操作吗 我似乎总是在每次点击时都从一个新数组开始 该数组只打印 1 个条目 这是一个按钮中最新的按钮标签 NSLog
  • 如何获取数组中元素的层次结构路径

    我总是想获得数组中元素的确切路径 数组示例 array a gt aaa b gt array bbb1 bbb2 gt array bbb3 bbb4 因此 为了到达 bbb4 我需要经过 b gt bbb2 gt bbb4 如何获取多维
  • 如何构造 LINQ to Entities 查询来直接加载子对象,而不是调用 Reference 属性或 Load()

    我是使用 LINQ to Entities 或实体框架 无论他们如何称呼它 的新手 我正在编写很多这样的代码 var item from InventoryItem item in db Inventory where item ID id
  • 如何使用 xsl-fo 和 apache fop 0.95 显示固定图像高度和宽度

    我正在尝试修复使用 fop 0 95 生成的 pdf 中图像的高度和宽度 这是用于它的代码
  • Nexus 6P 上硬件传感器的 Android 采样率变化

    我正在开发一个 Android 应用程序 用于研究 并且正在读取多个传感器数据 例如加速度计 陀螺仪 气压计等 所以我有 4 台 Nexus 6P 设备 全部配备最新版本工厂形象 https developers google com an
  • 到底是什么决定了 JavaScript 模块在 .html 中的执行顺序?

    我读到了首先加载最先出现的模块 https javascript info import export 这不是真的 在我回答这个问题之前 我了解到 首先执行没有导入的模块 叶模块 导入的模块只有在其导入的模块执行后才会执行 这让我能够解释这
  • 将 SQL STATISTICS TIME 和 IO 捕获到表中

    有没有办法捕捉STATISTICS IO and TIME在 T SQL 中 用于登录表 Sort of 与给出的统计数据相同SET STATISTICS TIME由查询统计 DMV 捕获 sys dm exec query stats h
  • 下一个更高/更低的 IEEE 双精度数

    我正在做高精度的科学计算 在寻找各种效果的最佳表示时 我不断想出想要获得下一个更高 或更低 可用双精度数的理由 本质上 我想要做的是将 1 添加到 double 的内部表示中的最低有效位 困难在于 IEEE 格式并不完全统一 如果要使用低级
  • 如何在反应传单中制作椭圆形?

    我想在反应传单中制作一个椭圆形 我已经检查过这个问题如何在react leaflet中制作一个椭圆形 https stackoverflow com questions 49089011 how can one make an ellips
  • Lombok 和 Jackson - 冲突/不明确的属性名称定义

    我收到一条警告消息 com fasterxml jackson databind JsonMappingException Conflicting ambiguous property name definitions implicit n
  • 使用随机森林的 AUC 基特征重要性

    我正在尝试使用随机森林和逻辑回归来预测二元变量 我的类别严重不平衡 Y 1 的大约 1 5 随机森林中的默认特征重要性技术基于分类准确性 错误率 这已被证明对于不平衡类来说是一个不好的衡量标准 请参阅here http www biomed
  • 为 mac ruby​​ 开发设置 .emacs 文件

    我在 Mac 上的 emacs 中加载 ruby 模式时遇到困难 emacs 文件位于 emacs 我已经向其中添加了几个命令 许多命令是从该站点粘贴的 但似乎没有一个被加载 有什么建议吗 我不确定文件是否未加载或者命令语法错误 我所需要的
  • 抛出“std::out_of_range”实例后调用终止

    我绝对是编程初学者 我在构建以下代码时遇到此错误 error terminate called after throwing an instance of std out of range what vector M range check
  • 发行说明,有什么用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • windows下修改ip地址的脚本

    我使用计算机通过以太网与硬件进行通信 为了与此设备通信 我将 IP 设置为 192 168 0 11 将子网掩码设置为 255 255 255 0 将 IPv4 的默认网关设置为 192 168 0 1 为了使用互联网 我通过控制面板选择
  • 如何将几何数据字段显示为文本

    我将 DELPHI 与 ADO 和 SQL Server 2014 一起使用 在我们的数据库表中 有一个用于几何数据的空间列 我们可以在该字段中读取和写入数据 更多信息如下 https learn microsoft com de de s
  • 找不到 ios 文档的 /var/mobile/applications 目录

    我正在尝试在连接到 xcode 的 iPad 设备上运行发布版本以进行调试 我不确定 但猜测当我这样做时 文档目录最终会出现在我的本地计算机上的某个位置 而不是在 iPad 上 就像我在没有 xcode 的情况下运行它时一样 我得到如下目录
  • 运行时动态选择方法;访客模式或反射的替代方案

    我正在开发一个小型游戏模板 其世界由如下节点组成 World Zone Cell Actor Actor Item Where a World可以包含多个Zone物体 一个Zone可以包含多个Cell对象等 其中每一个都实现了Node接口
  • perl 如何将字符串转换为日期时间?

    我尝试在 perl 中将字符串转换为日期 但出现错误 use strict use warnings use DateTime use Date Manip my date ParseDate 20111121 print today is
  • 服务工作线程不从缓存返回文件

    我正在尝试使用 Service Worker 缓存单页 Web 应用程序 它应该从缓存中获取所有文件 并仅在发布新的服务工作线程版本时更新该缓存 使用预缓存功能 我将一些文件写入缓存 如下所示 function precache retur