问题标签 [service-worker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1437 浏览

push-notification - 除最后一个外,多个 Chrome 推送通知会自动关闭

我有一个从服务器获取多个通知的 Service Worker。问题是 Chrome 中的所有通知都会自动关闭,除了最后一个。我究竟做错了什么?

0 投票
3 回答
18012 浏览

javascript - 仅在离线时使用 ServiceWorker 缓存

我正在尝试将服务人员集成到我的应用程序中,但我发现服务人员即使在在线时也会尝试检索缓存的内容,但我希望它在这些情况下更喜欢网络。我怎样才能做到这一点?下面是我现在拥有的代码,但我不相信它正在工作。为简洁起见,省略了 SW 安装代码。

这似乎会导致警告,例如The FetchEvent for "[url]" resulted in a network error response: an object that was not a Response was passed to respondWith().我是服务人员的新手,因此对任何错误的术语或不良做法表示歉意,欢迎任何提示。谢谢!

0 投票
2 回答
2505 浏览

google-chrome - 如何实现服务工作者?

我已经浏览过不同的博客来解释服务工作者,其中之一是 打开 Web 推送通知。我按照 Open Web Push notification 中的说明执行了一个创建 curl 注册 ID 的代码。创建注册 ID 后,我将其放入数据库中。但我没有收到任何通知。我通常在谷歌控制台中启用 gcm。我是否也应该编写 gcm 服务器和客户端代码,因为我已经阅读了很多博客,但没有人说要这样做。我应该怎么做才能收到通知。

如果我遗漏了什么,请参考下面的代码。

index.html

main.js

配置.js

服务工作者.js

演示.js

写完所有这些代码后还能做什么?我没有使用 gcm,所以很难启用,需要帮助。

0 投票
1 回答
1856 浏览

javascript - 从 Service Worker 获取主页 URL

我正在尝试从 AppCache 迁移到大型框架的 Service Worker(构造 2 - 请参阅 www.scirra.com)。很容易找到如何使用 Service Worker 缓存资源列表,然后在 fetch 事件中响应缓存条目的示例。但是,我发现 AppCache 的两个功能很难用 Service Worker 复制:

  1. 自动缓存主页。
  2. 通过在主页加载时请求单独的文件 (offline.json) 检查更新。

这两个都需要识别索引页(#2 将在请求索引页的同时检查更新)。但是,我发现自己陷入了看似不雅的解决方案。请注意,如果请求“foo/”,许多服务器会返回“foo/index.html”,但其他服务器不会,还有一些使用动态路径,因此我无法列出任何硬编码的主页 URL。我必须通过当前页面的 URL。

对于#1,我在“安装”事件中跳过Waiting(),在“激活”中声明()客户端,clients.matchAll()迭代每个客户端,然后将client.url添加到缓存中。这似乎有点啰嗦,有没有办法在“安装”事件中获取主页 URL?

对于 #2,我必须在每个 fetch 事件中调用 clients.matchAll() 并测试当前请求 URL 是否与任何客户端 URL 匹配。如果它是主页,我会检查更新,否则正常处理。这看起来很不优雅,因为在页面加载时发生的数百个 fetch 请求中的每一个都必须不断获取所有客户端的列表并匹配它们的 URL。

有没有更好的方法从服务人员那里获取主页的 URL?

0 投票
2 回答
58 浏览

javascript - 在 ServiceWorker 中识别请求的页面来源

在 aServiceWorkeronfetch处理程序中,我希望能够识别 aRequest来自哪个页面。例如,如果我有 2 个请求的页面/resource.js,并且这个请求被传递给服务工作者(onfetch处理程序用 a 调用FetchEvent),我如何判断它是请求/resource.js两次的页面的一个实例,还是请求 2 个不同的页面/resource.js?

这可能吗?

0 投票
1 回答
87 浏览

javascript - 查看服务工作者中的请求是否成功

我的服务人员中有以下代码:

但是,它在开发控制台中做了一些奇怪的事情,并且似乎使脚本异步加载而不是同步加载(在这种情况下这很糟糕)。

fetch(event.request)有什么方法可以在不手动调用的情况下监听请求何时完成?

例如:

0 投票
1 回答
591 浏览

web - 当今离线 Web 应用程序的最佳方法

我正在尝试构建一个有时需要离线工作的网络应用程序。到目前为止,标准方法是使用浏览器的应用程序缓存。但是,应用程序缓存似乎已被弃用,并将在未来从浏览器中删除(请参阅https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache)。建议使用 Service Worker。但是,目前并非所有浏览器都完全支持 Service Worker。

那么该怎么办?考虑到应用程序缓存和服务工作者的当前状态,今天构建离线 Web 应用程序的最佳方式是什么?还有其他对浏览器功能依赖程度较低的方法吗?

0 投票
3 回答
1142 浏览

javascript - 如何使用服务工作者存储用户 ID

有没有办法用服务人员存储用户 ID 和可能的其他信息?

这样当您向它发送推送通知时,它就能够使用本地存储的信息并对其进行处理?

我尝试使用 localStorage,但它似乎无法识别它。

当我收到此错误时:

Uncaught ReferenceError: localStorage is not defined

0 投票
5 回答
43081 浏览

service-worker - Service-worker 更新新资产

我一直在阅读html5rocks 服务工作者简介文章,并创建了一个基本的服务工作者来缓存页面、JS 和 CSS,它们按预期工作:

当我对 CSS 进行更改时,由于服务人员正确地从缓存中返回 CSS,因此不会获取此更改。

我卡住的地方是如果我要更改 HTML、JS 或 CSS,我将如何确保服务人员从服务器加载更新版本(如果可以)而不是从缓存中加载?我尝试在 CSS 导入上使用版本标记,但这似乎不起作用。

0 投票
1 回答
10221 浏览

javascript - 服务人员抛出 net::ERR_FILE_EXISTS 错误?

这是我在注册服务人员后每次刷新时都会遇到的错误。我已确保 service-worker.js 文件存在于根目录中。服务人员也已注册并且工作正常。但我仍然不断收到这个错误。我也在本地主机上工作。

这是我的 service-worker.js 文件:

script.js 文件: