问题标签 [background-sync]

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

google-chrome - 如何手动触发后台同步(用于测试)?

在 Chrome 中,是否有任何方法可以手动触发后台同步以用于测试/开发目的?

0 投票
1 回答
1494 浏览

indexeddb - Service Worker 后台同步 - 在拒绝承诺时 - waitUntil 没有重试?

我正在创建一个利用 IndexedDB 和服务工作者的离线第一个博客平台。这里的想法是如果用户离线并尝试发送帖子 - 在后台发送。这个项目是为我的论文准备的,我只看了一个星期左右的 Promise - 如果这是一个简单的错误,我深表歉意!

从我在 react/redux 中的操作来看,我正在成功发送同步事件。

下面是我的同步事件处理程序的代码

下面是 openDatabase - (IndexedDB)

下面是databaseGet

最后,下面是 sendAllFromOutbox

据我了解,如果 sendAllFromOutbox 失败/拒绝 - 它应该再次被调用。但它似乎没有被调用 - 因此没有在后台发送。

如果您想查看我的回购 - 它在这里https://github.com/georgecook92/Stir

谢谢!

乔治

0 投票
1 回答
1145 浏览

service-worker - 具有 CSRF 保护的 Service Worker 后台同步的最佳实践模式

我有一个使用嵌入在页面中的一次性令牌来确保 CSRF 保护的请求 - 攻击者可能能够欺骗我的用户发出非法请求,但他们无法获得令牌,即使他们可以随每个请求而更改并且可能过期。

到目前为止,如此安全。

我想使用服务人员实现后台同步,以便用户可以离线发布数据,然后在他们获得连接时发送该数据。

但是,这意味着该页面无法获取 CSRF 令牌,并且在用户构建它时与请求链接的任何令牌在实际发送数据时可能是无效的。

这似乎是任何进步网站的普遍问题,处理它的最佳实践是什么?

我认为后台同步可以请求一个新令牌,将其应用于要发送的数据,然后发送它,这仍然是一个 CSRF 攻击者无法利用的循环,但我不确定. 任何人都可以确认这一点吗?

我是否缺少服务人员或后台同步的某些功能?

0 投票
0 回答
786 浏览

javascript - Service Worker 重复出现

我可以制作一个服务工作者,在后台运行并以特定时间间隔轮询服务器,并在 Chrome 浏览器关闭时返回响应或显示通知(推送通知)。我正在为一个网站工作,该网站要求服务人员许可并根据从服务器收到的请求在后台以特定时间间隔同步请求显示通知。

编辑 1: 截至目前,我可以看到 chrome 正在处理此问题,但该帖子在 2015 年 12 月太旧了。他们已经写了,他们将在 2016 年上半年推出它。直到现在还没有。

我们的目标是在 2016 年上半年将后台同步发布到 Chrome 的稳定版本。但我们也在开发一个变体,“定期后台同步”。这将允许您请求受时间间隔、电池状态和网络状态限制的“周期性同步”事件。当然,这需要用户许可,但这也取决于浏览器何时以及多久触发这些事件的意愿。例如,一个新闻站点可以请求每小时同步一次,但浏览器可能知道您只在 07:00 阅读该站点,因此同步将在每天 06:50 触发。这个想法比一次性同步有点远,但它即将到来。

0 投票
2 回答
3657 浏览

service-worker - 将自定义数据传递给服务人员同步?

我需要发出 POST 请求并发送一些数据。我正在使用服务人员sync来处理离线情况。

但是有没有办法将 POST 数据传递给服务人员,所以它再次发出相同的请求?

显然,当前的解决方案是将请求存储在某些客户端存储中,并在客户端获得连接后 - 从存储中获取请求信息,然后发送它们。

还有更优雅的方式吗?

PS:我想过让服务工作者向应用程序代码发送消息,以便它再次发出请求......但不幸的是它不知道注册服务工作者的确切客户端:(

0 投票
2 回答
1296 浏览

service-worker - Service Worker 同步仅在第一次触发

单击按钮时,我成功注册sync,它会触发我在service-worker. 如果我离线 - 它会等待浏览器获得连接然后触发。

但是 - 当我第一次单击按钮时一切都很好 - 从那时起再次单击按钮成功注册sync,但sync服务工作者中的事件永远不会触发:

我仅在第一次单击该按钮时才看到控制台记录。我错过了什么吗?

0 投票
1 回答
404 浏览

api - 设置 ember-service-worker-cache-fallback 以同步数据

我是 ember 和服务人员的初学者。我的目标是设置一个可以离线工作的简单 ember 应用程序。我基本上有一个可通过 API (GET/POST) 获得的元素列表。

当我在线时,一切都按预期工作。我可以获取列表并发布新项目。当我离线时,应用程序可以工作,但是一旦我重新上线,网络请求就不会执行。所有网络请求实际上都是在我离线时执行的(显然失败了)。我希望服务人员缓存网络请求并仅在我重新联机后执行它们。这是错的吗?

这里有一些关于我的设置的信息:

灰烬版本:

  • 余烬-cli:2.13.1
  • 节点:7.10.0
  • 操作系统:达尔文 x64

Service Worker 附加组件(如 app/package.json 中所列):

我可能还应该提到我在 1.1.3 版本中使用了 ember-django-adapter。

这是我的应用程序/ember-cli-build.js

我的网络请求 (GET/POST) 转到http://localhost:8000/api/v1/properties/

这是我的 app/adapters/applications.js

当我打开应用程序时,服务人员会注册:

这是网络请求在 Chrome 中的显示方式:离线时的网络请求

我认为问题出在 ember-service-worker-cache-fallback 的配置中。但我不太确定。欢迎任何想法或指向工作示例的链接。到目前为止,我没有找到很多关于 ember-service-worker-cache-fallback 的信息。

谢谢!

0 投票
1 回答
1328 浏览

service-worker - 如何使用工作箱对发布请求进行排队?

在我的 service worker 中使用来自workboxjs 示例的以下 js进行测试:

我想尝试如何使用 workbox-sw 在离线模式下对发布请求进行排队,因此一旦网络可用,它就会处理来自队列的请求!

Q 1: 我想我需要导入额外的库来定义我的 post 方法的路由,如 github问题 #634上所示

如何在浏览器上使用导入?我尝试使用importScripts但它不起作用。

Q 2: 我是否需要任何额外的库来进行后台同步,所以 post 方法需要排队?

0 投票
2 回答
1507 浏览

service-worker - Workbox 仅将时间戳缓存到 indexDb,如何使用 indexDb 中的 json 数据进行拦截?

下面的路由定义将 json 数据作为 MyCachedData 存储在缓存中,IndexDb 只存储 url 和时间戳。

是否可以仅将 json 数据存储在索引数据库中,如何定义它以使用 Workbox 拦截(添加、更新、删除)?

0 投票
1 回答
1843 浏览

offline - Service Worker:离线处理请求,在线发送

我有一个聊天网络应用程序,我希望它可以离线工作。为此,我使用渐进式 Web 应用程序功能(Service Workers)来使用缓存来获取 shell 应用程序和已加载的消息。

我想要做的是能够在我离线时发布消息并让服务人员处理连接问题(即:将消息保存在某处直到离线并且一旦我们在线发送帖子消息)。

我想使用 Service Worker,因为如果用户在发布没有连接的消息后离开 Web 应用程序,我也想发送消息。

为此使用的最佳 API 是什么?

我看到了后台同步API,但它不是标准的,而且似乎近 2 年都没有更新。


如果有一种方法可以让客户端(Web 应用程序)完全不知道这种机制,那就太好了。

我的意思是我希望我的应用程序只做一个 fetch("/message", {method : "post", body : {content : "hey there"}) 然后服务工作者只是拦截提取,如果我们在线那么它只是发送提取,但如果我们离线它“等待”连接建立再次,然后发送帖子。


我想知道服务工作者中是否有一个可用的事件监听器,当连接从离线变为在线时,它将被激活。这样我应该能够在离线时将请求存储在 indexDB 中,然后在在线时发送帖子。我看到了,navigator.onLine但这不是一个事件:(