问题标签 [service-worker-events]

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 回答
196 浏览

javascript - 离线页面的渲染在实时服务器上不起作用

我尝试在我的服务人员上渲染一个离线页面,它在我的本地主机上运行良好,但显然它在我的实时服务器上不起作用,我没有收到任何错误

在实时服务器上,不呈现离线页面,而是呈现当前请求

0 投票
1 回答
617 浏览

javascript - 注册服务工作者失败 - React

Service Worker 注册失败,出现以下异常。

Failed to register ServiceWorker. The origin of the provider scriptURL('https://dev.xyz.cdn.com') does not match the current origin ('https://dev.xyz.com').

目前所有资产都部署在 CDN 中。因此域与脚本源 url 不匹配。如何解决这个问题?

0 投票
1 回答
342 浏览

service-worker - 如果用户手动删除 cookie,则清除 service worker 缓存

我目前正在使用 Workbox 来使用 Service Worker 完成一些缓存。现在,当用户注销时,我面临着从缓存中删除更多个性化数据的问题。我们已经通过在注销操作时向 SW 发布消息来实现这一点。但是,我在处理用户删除 cookie 的边缘情况时遇到了麻烦。由于我们如何进行身份验证,用户在 cookie 删除时会被注销。但是我们无法检测到此删除,因此无法清除缓存。

关于如何处理边缘情况或更好地处理 SW/Workbox 中经过身份验证的资产的任何建议?谢谢!

下面是我们当前流程的一个简短示例。

0 投票
1 回答
51 浏览

service-worker - 如何在网络推送中添加再次提醒我的操作?

在显示我的网络推送通知时,我在我的选项中添加了一个操作,以便用户可以要求在 30 分钟内再次收到通知。

然后我在服务人员中处理操作:

如果只有一种方法可以重新发出推送事件。

上面代码的问题是它不会在 30 分钟后显示通知,但是如果我将超时设置为 1 分钟,它就可以正常工作。

我认为 Chrome 忽略event.waitUntill并杀死了setTimeout.

是什么原因造成的,我该如何解决?

0 投票
0 回答
528 浏览

javascript - 如何在服务工作者中缓存之前修改响应正文?

我认为这会相当简单,但我很难成功发送响应,然后修改我的克隆响应,该响应存储在我的服务工作者内部的缓存中。

最终,我想将我的缓存数据附加到获取的时间和日期。我正在使用我的服务人员首先从网络中获取这些数据,如果它不可用,则回退到缓存中。

这是我的服务人员的代码

0 投票
1 回答
1267 浏览

service-worker - 浏览器关闭时如何唤醒服务人员

我在玩服务人员的东西。我已经做到了以及清单 json。我想在以下情况后触发服务人员启动:

添加了推送集成并从服务器端发送推送通知。在客户端收到它,但前提是我在我的应用程序页面中。

以下是我想尝试启动服务工作者的步骤:

  1. 我第一次打开网页
  2. Service - Worker 已安装
  3. 我完全关闭浏览器
  4. 我重新打开浏览器
  5. 现在我需要触发 Service -Worker start - How ?

我想知道我可以使用什么或者我需要在我的 service worker js 或 manifest json 中添加什么以使这种情况成为可能。

0 投票
0 回答
149 浏览

javascript - 窗口加载成功后的 postMessage

我正在尝试实现以下功能

用户打开一个page 1有一个button. 单击button另一个窗口打开但在该程序之前检查窗口是否已经打开,如果它已经打开,则重新打开现有窗口或打开新窗口。

在打开一个窗口时,我正在使用postMessage.

现在,问题是当我打开一个窗口时(如果它尚未打开),有时窗口无法接收 postMessage 发送的消息,因此我在以下代码中使用了 setTimeout。

但是,这不是一个可靠的解决方案,所以我需要一种在新打开的窗口中每次都接收消息的方法。

以下是代码service worker

0 投票
1 回答
1999 浏览

javascript - 检查用户是否与 Service Worker 重新联机

有没有办法检测用户是否使用服务人员连接回网络/在线?

当用户回到网络时,我想获取一些数据。

它可能在 fetch 事件处理程序中完成,但我更喜欢不那么 hacky 的解决方案。

我想出了hacky解决方案的伪代码:

0 投票
1 回答
153 浏览

javascript - Service Worker 根据某些条件运行事件 waitUntil()

我正在尝试cache-then-network在服务工作者中实施一种策略,该策略在后台更新缓存。我想避免不必要fetch的请求,所以想出了以下解决方案 -

update函数通过使用网络获取请求来更新缓存。问题是该updated变量始终为假,导致该update函数每次都运行。

我对服务人员不太熟悉,代码基本上是从多个来源拼接而成的。所以欢迎替代/更好的解决方案。我的最终目标是首先缓存,在后台从网络获取,并设置一个标志来告知内容是否已更改。

0 投票
1 回答
35 浏览

service-worker - JavaScript 离线 serviceworker 示例是如何工作的?

https://googlechrome.github.io/samples/service-worker/basic/上的页面 包含您开始使用现代离线网页所需的所有脚本。在我偶然发现它之前,我花了很多徒劳的时间研究这个主题。突然间,我一直在阅读的所有内容开始变得有意义。HTML5 再次给我留下了深刻的印象,因为它是一个极好的开发系统。

它有一小段脚本需要在你的主页上运行,它有一个完整的服务工作者脚本,当你在线时会从你的服务器获取文件——或者当你离线时从缓存中获取它们。

我花了不到一个小时就让它工作了。注意您可以在本地主机上使用 http 对其进行测试。任何其他服务器都需要 https 连接。Google 和 Firefox 调试器不显示 serviceworker 的来源。

从一开始就很清楚,serviceworker 示例中展示的功能非常接近我的应用程序所需的功能,但我认为我发现了一个错误。

激活处理程序应该负责清理旧缓存。这是脚本 - 从页面逐字逐句。

简而言之,它不是删除旧缓存。我认为它在执行过滤器以确定不需要哪些缓存之前尝试删除缓存。

我是一位经验丰富的程序员,但这个片段让我害怕。对于生产应用程序来说,它非常简短,但如果您正在调试它,则很难阅读。如果作者以更详细的方式编写它会很好,以便更多的开发人员能够理解发生了什么。

它是如何工作的?