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

javascript - ServiceWorker 范围内的页面 URL

如何获取在 ServiceWorker 范围内注册 ServiceWorker 的页面的 URL?

main.js

sw.js

0 投票
2 回答
34491 浏览

google-chrome - 使用 localhost 注册服务工作者失败

当我尝试在 Chrome 42 上由 node Express V4 服务器提供的基本应用程序中注册服务工作者时,出现以下错误:

DOMException: 无法注册 ServiceWorker: 获取脚本时收到错误的 HTTP 响应代码 (404)。{消息:“无法注册 ServiceWorker:获取脚本时收到错误的 HTTP res...code (404)。”,名称:“NetworkError”,代码:19,INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2...} 代码:19消息:“未能

这是注册码:

0 投票
2 回答
16398 浏览

javascript - 防止 Service Worker 自动停止

Service Worker 似乎会在某个时候自动停止。此行为无意中关闭了在激活时建立的 WebSocket 连接。

何时以及为何停止?如何以编程方式禁用此意外操作以保持 Service Worker 保持运行?

0 投票
1 回答
1217 浏览

javascript - Service Worker 在获取 MP3 音频时抛出错误

我希望为 Android+Chrome 上的用户提升我的网络应用程序以添加到主屏幕。(灵感来自:Chromium 博客条目

为此,我需要一个运行的Service Worker,甚至是一个虚拟的。(Chrome 需要 Service Worker 来证明我对 Web 应用程序是认真的)

所以我创建了一个没有内容的虚拟 Service Worker。它使用正确的无缓存标头提供服务,通过 HTTPS 提供服务,并作用于整个域。

事情通常可以正常工作,但是每次我尝试动态创建音频元素时:

...我的控制台显示出一些不愉快(取自 Chrome Canary,以便从服务工作线程更好地传递消息,但基本上相同的输出在 Chrome current 中):

我想重要的是要注意,很明显,我不是直接检索资源,只是创建元素并让浏览器检索 MP3。

MP3 确实被提取了(我能够在音频元素上运行 .play() 方法)。只是控制台日志中的错误堆积如山,让我怀疑这种方法的可靠性。此外,顺便说一句,在 Canary(但不是当前)中,失败会将我的“HTTPS 锁定”指示器从绿色更改为“警告”(因此,未来的问题)。

音频源与页面来自同一个域,并且都是 HTTPS。所以来自服务工作线程的“混合内容”消息很奇怪;它引用了一个以 '' 作为 url 的视频。

问题:我做错了什么还是 Chrome 错误?我需要的不仅仅是一个虚拟(空)服务人员吗?如果我做错了什么,我想找到一个最佳实践/长期类型的解决方案,而不是一起破解一些东西,但我会尽我所能。;)

0 投票
1 回答
6670 浏览

javascript - 使用服务人员存储 REST 请求以同步它们

我正在考虑使用服务人员将我的应用程序离线。我已经通过缓存资源获得了令人满意的结果,但我还必须检查 onfetch 我是否连接到互联网,如果没有 - 存储请求,并将其推送到同步。

我了解,未来的 onsync 将对此有所帮助,但我需要 - 甚至是临时的 - 解决方案。

我尝试将请求存储在工作人员内的数组中,但它不是持久的 - 计算机重新启动后不起作用(而 SW 工作并提供离线内容)。

什么是好的方向 - 以某种方式将其存储在缓存中的文件中?还是使用 IndexedDB / SimpleDB(在 ServiceWorker 中访问 indexedDB。竞争条件)?

0 投票
1 回答
2360 浏览

javascript - 推送事件后来自 serviceWorker 的 PostMessage

推送事件后,我需要将消息从 serviceWorker 发送到页面。我无法指定端口属性(如https://jakearchibald.github.io/isserviceworkerready/demos/postMessage/),因为我没有发送此消息

此代码不起作用(也许我做错了什么)

0 投票
5 回答
28840 浏览

service-worker - navigator.serviceWorker 从未准备好

我成功注册了一个服务人员,但是代码

挂起——函数永远不会被调用。为什么?

0 投票
6 回答
32190 浏览

ios - 服务人员和 iOS / Safari

在 Chromium 关于服务人员的页面上,有人指出

iOS 上的 Chrome 不支持 Service Worker。

我假设它可以使用一些cordova插件交付给iOS。有没有其他方法可以在 iOS 设备上使用 Service Worker?
我担心在 iOS 上发布新版本和 Cordova 新版本之间的时间。

有谁知道 iOS 上的 Chrome 将来是否会支持服务人员?:)

0 投票
1 回答
1790 浏览

service-worker - 在 Chrome >= 44 中注销服务工作者的 API 是什么?

我正在尝试注销已安装的服务人员。我知道注册承诺将注册作为参数传递给成功函数,我可以将其存储在某个范围内,但是在页面重新加载后这将不起作用(我希望能够取消注册已安装的工作人员在之前的会话中)。我试图查找注册中定义的一些 ID,以便我稍后检索它,但这似乎不存在。

此页面提到 navigator.serviceWorker.unregister (将范围作为参数),但在我的环境(Chrome 44,Linux)中没有定义。只是还没有实施吗?有没有我可以暂时使用的解决方法?

0 投票
6 回答
3939 浏览

javascript - Ruby on Rails 和服务工作者

我正在尝试在我的 Ruby on Rails 应用程序中使用服务工作者。

我需要在我的app/javascripts/service-worker.js.erb文件中使用一些 erb 功能。Service Worker 注册脚本如下所示:

这不起作用;我从来没有在这里得到承诺:

我也试过.//范围,但我得到了这个错误:

DOMException:注册 ServiceWorker 失败:提供的范围 ('/') 的路径不在允许的最大范围 ('/assets/') 之下。调整范围,移动 Service Worker 脚本,或者使用 Service-Worker-Allowed HTTP 标头来允许范围。

如果我将我service-worker.js的移动到public文件夹,删除.erb扩展名并将范围更改为./,一切正常,但我没有模板引擎。

有什么建议么?