Service Worker 不会缓存 Manifest start_url

2024-02-10

我正在使用 Lighthouse 来审核我的网络应用程序。我正在克服失败,但我坚持这一点:

失败:Service Worker 未缓存 Manifest start_url。

In my manifest.json I have

"start_url": "index.html",

In my worker.js我正在缓存以下内容:

let CACHE_NAME = 'my-site-cache-v1';
let urlsToCache = [
    '/',
    '/scripts/app.js',
    '/index.html'
];

这与我在 Chrome 开发工具的“应用程序”选项卡中看到的内容一致:

那么...为什么它告诉我start_url没有缓存?


这是我的完整版worker.js file:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/worker.js').then(function(registration) {
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

let CACHE_NAME = 'my-site-cache-v1.1';
let urlsToCache = [
  '/',
  '/scripts/app.js',
  '/index.html'
];

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open(CACHE_NAME)
    .then(function(cache) {
      console.log('Opened cache');
      return cache.addAll(urlsToCache);
    })
  );
});

我们来看看灯塔的源代码 https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/audits/webapp-install-banner.js

static assessOfflineStartUrl(artifacts, result) {
  const hasOfflineStartUrl = artifacts.StartUrl.statusCode === 200;

  if (!hasOfflineStartUrl) {
    result.failures.push('Manifest start_url is not cached by a service worker');
  }

}

我们可以注意到,它是不检查缓存,而是检查入口点的响应。原因一定是您的服务工作人员在获取时没有发送正确的响应。

You'll know that it's working, if in DevTools, in your first request, there'll be (from ServiceWorker) in size column: enter image description here

您提供的代码有两个问题:

第一个是你搞砸了服务人员代码与服务人员登记代码。 Service Worker 注册代码应该是在您的网页上执行的代码。

该代码应包含在您的页面上:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/worker.js').then(function(registration) {
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

您粘贴的其余内容应该是您的worker.js 代码。但是,服务工作人员已安装,因为您的缓存中有文件,所以我怀疑您只是错误地粘贴了该文件。

第二个(真正的)问题是服务工作人员没有返回此缓存文件。正如我之前证明的那样,来自灯塔的错误意味着服务人员没有返回start_url条目文件。

实现这一点的最基本的代码是:

self.addEventListener('fetch', function(event) {
  event.respondWith(caches.match(event.request));
});

Service Worker 是事件驱动的,因此当您的页面想要获取某些资源时,Service Worker 会做出反应,并从缓存中提供资源。在现实世界中,你真的不想那样使用它,因为你需要某种后备。我强烈推荐阅读部分从这里的缓存中提供文件 https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker

Edit: 我创建了拉取请求 https://github.com/GoogleChrome/lighthouse/pull/2775在 Lighthouse 源代码中澄清该错误消息

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

Service Worker 不会缓存 Manifest start_url 的相关文章

  • SSR 如何与 PWA 结合

    如何使用 PWA 渐进式 Web 应用程序 进行 SSR 服务器端渲染 据我了解 SSR SSR 运行时将加载页面并运行必要的脚本以将数据加载到页面上 然后返回渲染后的html 这对于不会运行 javascript 的网络爬虫和无脚本的浏览
  • 请确保您的 Service Worker 文件包含以下内容:/(const precacheManifest =)\[\](;)/

    我对 React Workbox 还很陌生 我试图让我的 Electron React 应用程序能够缓存所有图像和数据 以便在离线时可用 这正是我在 YouTube 视频中想要实现的目标 14 00 到 21 00 分钟 使用 React
  • 使用缓存存储 API 保存自定义响应

    我在用着缓存存储 https developer mozilla org en US docs Web API Cache构建渐进式 Web 应用程序 PWA 我需要一个自定义对象put https developer mozilla or
  • Blazor WebAssembly Visual Studio 调试器问题

    我创建了一个干净的 Blazor PWA 项目 当我尝试使用调试器运行它时 不到一半的时间它无法正确启动 一半的时间实际上会有所改善 如果尝试使用调试器 F5 或调试 开始调试 启动 则会打开一个新的浏览器窗口 其中 URL 为 about
  • 渐进式 Web 应用程序 - 不尊重屏幕方向

    我的网络应用程序不遵循我的设置中的方向manifest json manifest version 2 version 1 name My App short name My App icons src img myapp launcher
  • 我如何在 chrome Extension(manifest V3) 的服务工作者中包含 socket.io-client

    我从 cdn 复制了客户端 socket io 脚本 然后使用 importScript 但是当我真正运行时它给出了 ReferenceError document is not defined at JSONPPolling doPoll
  • 如何将 Angular 应用程序部署到 Heroku 并保持为 PWA? [复制]

    这个问题在这里已经有答案了 总结一下问题 我正在尝试将我的 Angular 6 应用程序部署到 Heroku 并保留渐进式 Web 应用程序功能 Heroku 上的最终构建没有 Service Worker 背景 我已经在 Angular
  • 在 Android 移动设备上使用 Chrome 调试 Service Worker

    我正在开发一个渐进式 Web 应用程序 为了确保它可以在移动设备上运行 特别是在 Android 版 Chrome 上 因为它有 90 的用户 我正在尝试在 Android 设备上测试 Service Worker 不幸的是 在安卓版 Ch
  • Service Worker 创建的缓存存储在下线刷新页面后消失

    我正在尝试为我的网络应用程序实现离线功能 但离线时我遇到了一些奇怪的行为 这可能是我所缺少的 因为它在 Chrome 和 Firefox 中都可以重现 我将在下面描述什么示例应用程序 https github com mzenz vanis
  • Service Worker 注册时出错

    我正在尝试注册服务工作者 但出现以下错误 注册ServiceWorker失败 当前的URL协议 不支持原点 null 我在 localhost 下使用 Node js 我有我的索引 html and service worker js在同一
  • Lighthouse:无法在本地主机上运行生成报告

    正如标题所示 我正在尝试为本地提供的 nuxt 应用程序生成报告 如果我通过 DevTools 生成报告 则需要非常长的时间 并且给我的评分非常差 与在部署的同一站点上生成报告相比 如果我尝试使用灯塔扩展 生成报告 按钮将被禁用 我是否会犯
  • 如何在一段时间后隐藏推送通知?

    我必须在一分钟后隐藏推送通知 为了实现这一目标 我应该在 Service Worker 中做什么 您可以使用notification close 方法 https developer mozilla org en US docs Web A
  • 如何在 create-react-app 中以开发模式启用 Service Worker?

    我知道我们可以在生产模式下测试我们的 Service Worker 但是重新构建和部署的过程非常烦人 有什么方法可以在开发模式下启用服务工作者吗 改变这个 window addEventListener load gt const swUr
  • 在 Facebook 浏览器中更新 Service Worker

    遇到了一个问题 我们的一些用户在我们网站的 Facebook 浏览器中存在有问题的 Service Worker 问题 当 Facebook 应用程序用户访问我们在 FB 上共享的页面时 他们会在 FB 浏览器上看到我们的 您离线页面 该错
  • 当路由器处于历史模式时,PWA 不会加载(基于 Vue CLI 3 的项目)

    我有一个基于 Vue CLI 3 的应用程序 我想将其用作 PWA 我需要它在历史模式下工作 因为哈希会介入我正在执行的基于 OAuth 的身份验证过程的一部分的重定向 当路由处于哈希模式时 可以像 PWA 一样正常加载 一旦我将模式更改为
  • 如何使用谷歌应用程序脚本开发渐进式网络应用程序

    我使用 google app 脚本开发了一些应用程序 并将它们部署为 Web 应用程序 它们都工作正常 然后我决定将它们转换为 PWA 原因是让它们可以安装在智能手机用户的主屏幕上 能够使用推送通知 缓存等 简而言之 PWA 提供的所有优势
  • 发送网络推送通知时出错:没有端点?

    我创建了一个基本应用程序 尝试使用 web push 节点库发送推送通知 但是 我总是遇到错误 你必须至少传入一个端点 我不明白 因为我 订阅 使用 ServiceWorker Api subscribe 方法 它创建了一个到我的本地主机地
  • Angular service-worker范围在安装过程中遇到错误

    我正在尝试使用 Angular Service Worker 但在尝试使用它时出现错误 这些是我的版本 Angular CLI 15 2 0 Node 16 18 1 Package Manager npm 8 19 2 OS linux
  • 无法将消息发布到服务工作人员,因为控制器值为空

    我正在尝试做一个website https secure depths 31934 herokuapp com 在 Service Worker 的帮助下可以离线使用 以缓存页面所需的文件 我试图让用户控制他希望缓存的图像 为此 我使用一个
  • Angular Service Worker 路线

    我已经使用 Angular Service Worker 构建了一个应用程序 除了路线之外 它在离线状态下运行良好 如果我转到基本网址 应用程序加载正常 但如果我在离线状态下转到任何其他路线 则会收到离线错误 我的 ngsw manifes

随机推荐

  • R 中 PCA 的结果载荷

    在R中进行PCA时 p lt princomp iris 1 4 我通过以下两种方法得出不同Component的系数 IrisLoading lt p loadings 1 2 methods1 use the fist two Comp
  • 在大型数据集上使用 grep 或 fgrep 的循环速度非常慢

    我正在尝试做一些非常简单的事情 grep 从列表中 对目录中的文件进行精确匹配的字符串 try grep each line from the files for i in cat data datafile do LOOK echo i
  • 为什么根窗口小部件与窗口的大小不同?

    我正在尝试使用自定义小部件GridLayout 但结果总是在角落里出现一个很小的网格 而不是在整个窗口中扩展的网格 示例代码 import kivy kivy require 1 5 1 from kivy app import App f
  • 到大端还是小端? [关闭]

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

    这里是入门 https facebook github io react docs getting started htmlReact的例子 在例子中 下面的代码片段是单独的main js file ReactDOM render h1 H
  • 从委托访问列表视图 currentIndex

    我有一个QMLListView委托从另一个文件加载其组件的地方 单击委托项目时 我想更新ListView CurrentIndex and highlight所选项目 当我明确设置时它有效id of the ListView 但是因为我想使
  • Scala 2.13 视图与 LazyList

    我正在将一个项目从 Scala 2 12 1 迁移到 2 13 6 并发现SeqView flatMap现在返回一个View 其中没有distinct方法 因此 我有一段代码不再编译 val nodes debts view flatMap
  • 如何以正确的类型安全方式迭代记录键?

    让我们针对一些属性构建一个示例记录 type HumanProp weight height age type Human Record
  • 如何获取光标下的单词?

    假设有一个mousestop事件附加到整个文档 找出确切事件的最佳方法是什么word当鼠标停止移动时 在光标下方 如果有任何文本 我可以从事件处理程序获取底层 jQuery 元素 document elementFromPoint e cl
  • MATLAB:在子图中绘制/保存网格函数的 X-Y 视图

    正如标题所示 我试图将网格函数的 2 变量切片 例如 作为 jpg 保存为子图 我想使用 m 文件来执行此操作 因为我有很多要生成的图 我已经弄清楚如何在他们自己的图形上绘制视图 但我无法让它们正确地绘制为图形中的子图 为了说明我的意思 以
  • 绘制包含 80% (x, y) 点的圆

    我有一个二维数组 x y 的点 我想绘制一个包含该点 80 的圆 并且我想知道所得圆的半径 有没有办法用 python 来做到这一点 我一直在寻找一种方法来做到这一点 但没有成功 我很抱歉没有尝试 但我完全迷失了在不给圆半径的情况下取 80
  • 进程何时处理信号

    我想知道linux进程什么时候处理信号 假设进程已经安装了信号的信号处理程序 我想知道进程的正常执行流程何时会被中断并调用信号处理程序 根据http www tldp org LDP tlk ipc ipc html http www tl
  • 访问实例变量的语法? (目标-C)

    在 Objective C 中访问实例变量的正确语法是什么 假设我们有这个变量 interface thisInterface UIViewController NSMutableString aString property nonato
  • 与D3的关系图

    如何使用 D3 创建以下图表 我不知道这种类型的可视化的名称 我能找到的最接近的是 力导向 图 图例 填充的节点是人 非填充的节点是属性 例如最喜欢的颜色 这是我的版本 http jsfiddle net doraeimo JEcdS em
  • Python win32com“参数数量无效”

    我正在尝试使用 win32com 使用以下代码将多个 xlsx 文件转换为 xls import win32com client f r input xlsx xl win32com client gencache EnsureDispat
  • iOS 应用程序上的自定义字体 - 在模拟器中工作但不适用于 iPad

    在这里遇到一个奇怪的问题 我正在为我的学校项目 非商业 开发一个游戏 并且我正在使用自定义字体黑法院 http www dafont com black chancery font 根据 GNU GPL 免费 我遵循了多个来源的说明 其中包
  • Word 2016 for Mac 中的 CreateObject(“Excel.Application”)

    我有 Word 2016 VBA 代码来读取 Excel 文档中的数据 这适用于 Windows 平台 Windows 7 和 Windows 10 在 Mac 上 它失败了CreateObject Excel Application 操作
  • 子查询和相关子查询的区别

    下面的 SQL 查询是普通查询还是相关子查询 SELECT UserID FirstName LastName DOB GFName GLName LoginName LoginEffectiveDate LoginExpiryDate P
  • SqlBulkCopy,用引号引起来的字符串变量

    当尝试批量复制到 ASP NET MVC 项目中的 SQL Server 数据库时 我收到此错误 数据源中 String 类型的给定值无法转换为指定目标列的 nvarchar 类型 我查看了类似的问题 发现 1 帮助我查明了我的问题 c 无
  • Service Worker 不会缓存 Manifest start_url

    我正在使用 Lighthouse 来审核我的网络应用程序 我正在克服失败 但我坚持这一点 失败 Service Worker 未缓存 Manifest start url In my manifest json I have start u