问题标签 [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 回答
458 浏览

javascript - 如何访问 ServiceWorker 保存在缓存中的资源?

我正在尝试构建一个使用 ServiceWorker 的网页。我按照这个例子(对于 Chrome 45+),它似乎缓存了一些数据。我试图访问缓存的数据但没有成功。

是否可以通过 Chrome 控制台(类似于本地存储)找到缓存的数据?我可以从控制台运行任何简单的 JS 代码来获取它吗?

0 投票
2 回答
1084 浏览

javascript - Service Worker 镜像状态码

我尝试使用服务人员检测图像的错误 404。有没有办法获取图像获取的状态代码?

此代码适用于 html 文件,但是当它获取图像时,状态码始终为 0。有没有办法获取图像的状态码?我删除了缓存和其他所有内容以使我的示例变得简单。

这是我尝试加载的示例页面:

所以 html 页面本身的状态是 200,但两个图像都返回状态 0。

0 投票
2 回答
4412 浏览

javascript - Service Worker 中的同步或顺序获取

我需要从 Service Worker 发送一系列 PUT & POST 请求。发送它们的顺序很重要。

要求:

  • 给定请求方法、url 和 JSON 正文,发送请求
  • 如果成功(response.status < 300):
    • 将 body 传递给成功函数
    • 调用队列中的下一个请求
  • 如果失败:
    • 将 responseText 或 err 传递给错误函数
    • 停止执行

如果我简单地遍历队列并fetch为每个请求调用,网络差异会(通常会)导致请求无序到达服务器。

如何提出一系列fetch请求,其中每个结果都取决于前一个结果的成功?


我试过的:

  • XHR 代替(假设我可以使用“async:false”,但这在 Service Worker 中是不允许的)。
  • setTimeout(sendRequest, i*200). 一个黑客,不可靠。
  • Promise loops基于这些示例ES6 Promise Patterns。这似乎是最有希望的,但这些示例是针对假设成功的简单案例。无法让它与 fetch 一起使用。

上下文:我正在使用 API 请求的“发件箱”来支持离线读取、创建和更新数据。效果很好,除了这个排序问题。

0 投票
1 回答
299 浏览

google-chrome - ServiceWorker Chrome 推送通知 - 转发到新页面

我要做的是查看我网站的标签是否在 Chrome 中打开,如果是,请关注它并将它们转发到我正在通过的新 URL。

作为参考,当您看到“event.notification.data”时,它将是一个链接,例如“ https://www.example.com/mobile/profile.php?id=Webmaster

我可以专注于选项卡,但我无法使该选项卡重定向到我存储在“event.notification.data”中的 URL

这是我的代码

0 投票
2 回答
4409 浏览

android - Chrome for Android - 将网络应用程序添加到主屏幕

我正在尝试使用 Google Chrome 的原生横幅支持实现“添加到主屏幕”横幅,并以此演示作为参考。

https://googlechrome.github.io/samples/app-install-banner/basic-banner/index.html

根据那里的规范,要求是:

  • 该页面使用服务工作者(是的,见下文)
  • 该站点正在使用 HTTPS(是的,该站点具有有效的 SSL 证书,我正在通过 HTTPS 加载。chrome 显示该站点是安全的并且有一个绿色挂锁,证书中没有错误或警告)
  • 该应用程序声明了一个清单(是的,见下文)
  • 清单有一个短名称、144 像素图标和一种“图像/PNG”(是的,见下文)

我正在使用的清单如下。

其中包含一个 short_name 和一个 144 像素的 image/png 类型的图标。

我正在使用的服务人员是此代码的直接复制和粘贴:

https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/custom-offline-page/service-worker.js

在这篇文章中推荐:

https://developers.google.com/web/updates/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android?hl=en

服务工作者已注册,清单正在加载到页面中,并且图像 url 正确,但未显示横幅。

我还启用了 chrome://flags/#bypass-app-banner-engagement-checks,所以这不是我需要明天回来检查它是否有效的情况。我已经能够查看我检查过的所有 Chrome 演示的主屏幕横幅(这是我从中获取大部分代码的地方),并且我的手机安装了最新版本的 Chrome。

我还缺少什么可能会阻止主屏幕横幅出现吗?

谢谢。

0 投票
1 回答
900 浏览

javascript - Not able to load data URL for GCM push notification for chrome in 'notificationclick' event

While working on GCM push notification for Chrome, I have set up push notifications for when a service worker receives a push event for GCM.

I am launching a service call. That service returns a data object in which I have a URL which I want to open at the time when the user clicks on the notification

Here is the code I have so far.

This is working fine but sometime on some device notifications. But when clicking on notifications, it's opening null in the browser url bar.

What am I doing wrong?

0 投票
1 回答
2418 浏览

javascript - 什么是“DOMException:条目已存在”?

tl; dr 我的网络应用程序收到错误“DOMException:条目已存在”,我不知道这意味着什么。我无法在互联网上找到此错误的解释;可能我的 googlefoo 不够。


更长的版本。

我有相当简单的 todolist es6 应用程序

  • 将内容本地存储在 IndexedDB 和
  • 使用服务工作者拦截对“/sync”的获取以运行一些将 IndexedDB 与服务器同步的代码。
  • 使用服务工作者来缓存主页(使用cache.put,如果缓存条目已经存在,它不应该抱怨)

一切都很好。但是每隔一段时间,服务人员就会发出错误......

...chrome(在 ubuntu 上为 45.0.2454.93(64 位))慢到爬行,直到我去 chrome://serviceworker-internals 并停止服务工作者之前没有任何效果。在那之后,再过几天一切都很好。

很难调试,因为错误没有告诉我代码的哪一行引发了问题。

0 投票
1 回答
93 浏览

service-worker - Service Worker 查询缓存算法是否允许表达式匹配 URL 路径?

我发现了一个使用忽略部分 url 路径(路径不是ignoreSearch)的表达式来匹配请求 url 的用例。

该用例用于响应式设计中使用的图像处理服务,其中图像的尺寸编码在 url 路径中。这在这些类型的服务(Cloudinary、Firesize 甚至 Lorempixel)中很常见。

我注意到每隔一段时间,其中一个维度组件将请求将关闭一个像素。所需的尺寸是从客户端计算出来的——错误的来源在这里四舍五入——但是服务工作者缓存可能是这种变化的一个优雅的解决方案。但是,此舍入问题会导致缓存未命中,因为我无法指定可以忽略部分 url 路径。

url 表达式匹配会成为规范的一部分吗?一般来说,“使用 url A 获取,使用 url B 缓存放置/匹配”模式是否可以增长?

我知道解决此问题的解决方法与 ignoreSearch 的当前解决方法相同(直到它的实现),其中您使用一个 url 获取但使用另一个缓存。我只是想知道 url 路径表达式匹配是否会成为规范的一部分,或者是否考虑了 url 表达式匹配用例。我在权威规范中没有看到任何证据。

提前感谢您的任何见解。

0 投票
2 回答
1722 浏览

ruby-on-rails - 如何在 Ruby on Rails 中注册服务工作者?

我正在尝试在 Ruby On Rails 中注册一个服务工作者来实现推送通知 GCM。但什么也没有发生。请看我下面的代码:

这部分工作正常。但是,当我打电话时navigator.serviceWorker.ready.then(function(serviceWorkerRegistration),什么也没有发生。

我在搜索引擎上搜索,几乎没有什么可以帮助我。

有谁能够帮我 ?

0 投票
1 回答
327 浏览

request - 结构化克隆 Fetch API 请求对象的最佳选择是什么?

我正在尝试存储受 CSRF 保护的(查询字符串 + cookie)API POST 请求,以便稍后在 web 应用重新联机时重播。

为此,我想将请求对象(Fetch API)保存在 IndexedDB 中,但 IDBObjectStore.put 失败并出现 DataCloneError “无法克隆对象”。

Request 对象有一个简单的 JSON 主体,没有二进制数据,只有字符串。
这是在服务工作者(网络工作者)环境中运行的。

结构化克隆算法不会克隆请求对象有什么原因吗?[回答: 是] 如果是这样,我最好的选择是脱水/再水化这个对象来代替结构化克隆?

我真的想避免必须知道/访问 Request 对象的各个属性。我需要的请求部分是 url、标头、正文和 cookie(但同样,我不希望代码必须知道这些)。

提前感谢您的任何建议。