问题标签 [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 投票
3 回答
7219 浏览

javascript - Service Worker:当服务器上的文件发生变化时如何更新缓存?

您使用什么缓存策略?我阅读了 Offline Cookbook,最简单的使用策略是缓存静态内容并忽略 API 调用。

这个策略看起来像这样:

  1. 检查请求是否已经在缓存中
  2. 如果不添加请求,则响应对缓存
  3. 返回响应

如果服务器端文件已更改,如何更新缓存?目前,客户端始终获得缓存的结果。

这是我的缓存策略的代码:

0 投票
4 回答
8367 浏览

html - 在没有完全 https 站点的情况下,html5 中是否可以推送通知?

看起来推送通知终于可以用于网络应用了!不幸的是,这需要 ServiceWorker 的 https,并非所有站点都可能有。

我在它提到的规范中注意到的一件事:

if r's url's scheme is not one of "http" and "https", then: Throw a TypeError."

所以我很困惑 - 只要站点包含来自 https 的服务人员,该站点可以是 http 吗?例如,mydomain.com 可以包含来自https://anotherdomain.com的 https 服务人员?

另一个标准 web-api simple-push没有提到需要 https(可能是文档中的遗漏?),以及“Firefox 桌面上的用户体验尚未制定”。这个文档是过时的,还是真的只有 FirefoxOS 支持推送?

0 投票
1 回答
853 浏览

javascript - 在多站点环境中使用 Service Worker API

因此,现在有了 Service Worker api 提供的通知和离线缓存等所有新功能,我一直希望将其添加到我的 Web 应用程序中。

唯一的事情是我似乎无法弄清楚如何处理 https/ssl 问题。

我的网站允许人们在在线无代码环境中托管网站。新站点由主域之外的子域访问。这本身我只能看到需要通配符子域 ssl 证书。

我面临的复杂情况是高级网站可以添加自己的顶级域。据我所知,这会破坏服务人员。

所有这些站点只需要用户注册一次,因此用户可以在站点之间共享,您还可以跨站点获取通知和消息。

我想利用移动 api 的通知部分,但我需要先解决这个问题。

对此的任何帮助或启发将不胜感激:)。

0 投票
2 回答
670 浏览

caching - ServiceWorker:文件实际缓存的时间是什么时候?

我正在使用 ServiceWorker 来缓存一些资产,并且我想在所有文件都已成功缓存后让用户知道,以便他们知道内容可以脱机访问。什么时候是做这件事的合适时机?

我有几个console.log()要了解事物的流程。这是我注册 ServiceWorker 的时刻:

在 ServiceWorker 内部:

控制台显示:

所以我认为触发此通知的正确时刻是 after .addAll(),所以我认为它目前在哪里吐出“文件已被缓存!”?在 上执行此操作会很方便register(),但第三条和最后一条日志消息之间似乎存在延迟。如果是这样,因为我们在 ServiceWorker 内部,postMessage()向客户端发送此信息是否是最好的方式?

谢谢!

0 投票
2 回答
2412 浏览

javascript - Posting messages from a service worker to a client page

Today we can find many examples of sending message from a service worker to a client, but always following the reception of a message event in the service worker.

I would like to know if we can send messages independently of this event? And if yes, how? I tried few things, without success...

In my case, it's for redirect a client to a new page when my service worker receives a push event.

0 投票
1 回答
1498 浏览

javascript - Web/Desktop Notification API - 在刷新页面时强制关闭所有通知

我一直在研究 Web Notification API 或 Desktop Notification API。我了解它的构造方式以及它支持的属性和事件的数量。通知旨在与浏览器分开,即使浏览器被最小化,例如通知仍然可以显示。

我的问题是,有没有办法将通知与网页上的操作联系起来?特别是,我想在刷新页面时关闭所有通知对话框。我怎样才能做到这一点?

提前致谢。

0 投票
2 回答
2177 浏览

html - HTML5 推送通知 - 其他推送方式的示例

在 Google IO 2015 上,有很多关于带有 HTML5 和服务工作者的 Chrome 推送通知的讨论。

现在还为时尚早,而且例子很少。我正在寻找有关如何从 Google Cloud Messaging 以外的平台(例如 Azure 移动服务或 AWS)实现推送的服务器端示例。

0 投票
1 回答
2392 浏览

javascript - 在 Service-Worker 中使用 Crypto Node.js 加密并使用 window.crypto 解密

源代码:https ://github.com/HectorAnadon/Crypto-NodeJS-window.crypto

我正在使用 AES-128-GCM 将加密图片从 node.js 服务器发送到我试图解密它的服务工作者(在 Web 浏览器背景中运行的脚本)。通信效果很好,因为未加密的图片显示在网络浏览器中。

问题是:当我在服务工作者中解密时,在承诺 cryptoSubtle.decrypt 中,我得到一个异常,这是控制台为我打印的内容:解密错误:OperationError:(匿名函数)@ service_worker.js:310

service_worker.js 中的第 310 行是:console.error("解密错误:" + err); //第310行

你知道我做错了什么吗?非常感谢,我真的很感激。

这是使用 Crypto Node.js 的加密代码(此处的文档:https ://nodejs.org/api/crypto.html )

这是使用 window.crypto 的 Service Worker 中的解密代码(此处的文档:https ://developer.mozilla.org/en-US/docs/Web/API/Window/crypto )

0 投票
1 回答
1800 浏览

javascript - 如何将服务工作者注册到重定向的脚本 URL

这可能属于“不要那样做”的类别,但我正在尝试开发一个 chrome 扩展,它可以有效地将 Web 可访问的服务工作者脚本(“sw.js”)注入用户页面,然后注册该脚本的服务人员。

现在,我有以下内容: Manifest.json:

背景.js

initPage.js:

希望从这里,你会看到我想要完成的事情。基本上,我想尝试注册一个服务工作者sw.js,它托管在扩展程序的 web-accessible-scripts 中。我相信我可以做到这一点的方法是拦截请求switchme.js并将其重定向到 return sw.js

这种方法的唯一问题是,当我尝试这样做时,我的 chrome 浏览器崩溃了。我将堆栈跟踪到以下行extensions::sendRequest

任何调试想法或耳光,并很好地解释了为什么我疯狂地认为这可能有效,我们将不胜感激。

0 投票
0 回答
508 浏览

google-chrome - Service Worker 不加载 mp3 文件

尝试从以下来源加载 mp3 文件: https ://static.twilio.com/libs/twiliojs/refs/82278dd/sounds/dtmf-1.mp3

在服务工作者中使用非常简单的请求重定向代码:

也尝试过其他选择:

注意:如果我通过 {mode: 'no-cors'},服务工作者中不会引发错误,所有其他提到的情况都会引发错误:

Fetch API 无法加载https://static.twilio.com/libs/twiliojs/refs/82278dd/sounds/dtmf-1.mp3。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'my origin' 是不允许访问的。

我认为问题可能是 Service Worker 不发送 Accept-Encoding 和 Range Headers,因此它不加载资源。

任何形式的帮助,黑客将不胜感激。