1

我一直在寻找HTML通知和服务工作者的状态,并想知道 - 是否有可能显示延迟通知?基本上,我希望能够说“在30分钟内提醒我”(或其他),然后在30分钟后向用户推送通知。这可能会立即计划,但我没有看到任何允许它的功能。延迟HTML5通知?

我是否错过了某些东西,或者在特别是Chrome API的当前状态下是不可能的?

+1

为什么不直接通过超时处理程序发送通知? – Pointy

+0

@像这样的事情表明它不会工作:https://github.com/slightlyoff/ServiceWorker/issues/107在任何情况下,它可能意味着服务人员不断在后台运行,对移动设备看起来非常好。 – Alastair

+0

请参阅https://github.com/slightlyoff/BackgroundSync/blob/master/explainer.md#periodic-synchronization了解可能的方法,但有几点需要注意:目前尚未在任何浏览器中实现,但它不会为您提供一个关于确切执行时间的保证,它意味着重复发生的事件(所以你需要在第一个事件触发后取消注册)。 –

回答

0

https://developer.cdn.mozilla.net/media/uploads/demos/e/l/elfoxero/c17223c414d8ddafb7808972b5617d9e/html5-notifications_1400214081_demo_package/改编:

<script> 
    var Notification = window.Notification || window.mozNotification || window.webkitNotification; 

    function show() { 
     window.setTimeout(function() { 
      var instance = new Notification("Hello World!"); 
     }, 5000); 

     return false; 
    } 
</script> 

<a href="#" onclick="return show()">Notify me!</a> 
+0

如果没有别的东西,我会将其标记为正确的,但是我希望有一些事情不需要让标签始终保持打开状态 - 特别是在移动人员不太可能这样做的时候。 – Alastair

4

这是可能的,但不是直接与服务人员,至少在其目前的形式。这并不简单,因为服务人员无法保持半小时的清醒状态,或以setTimeoutsetInterval唤醒自己。浏览器会关闭工作人员,并且不会记录任何超时或间隔。你可以用打开的标签中的信息来唤醒它,但是你说你不需要保持开放标签,并且如果你假设一个开放的标签,那么为什么即使打扰服务工作者呢?正如Jeff Posnick在评论中所建议的那样,您最终可能会使用Sync或PeriodicSync API,但是,正如他还指出的那样,它们还没有实现,因此无论如何都不是真正用于此目的。

可以完成您在使用Chrome的Push API当前版本想要的东西,但你必须包括在循环中的服务器,并为自己设定了一个推送通知服务(即GCM)。下面是它如何工作,大致为:

  • 当你决定推迟的通知,让服务器知道它
  • 的延迟之后,在服务器上为用户
  • 服务发送一个推送消息工人响应推醒了,并创建一个新的通知

最后这部分将是一个麻烦,因为目前你不能真正以推动发送任何类型的有效载荷,所以你的服务人员将需要一些搞清楚通知应该是什么的方法。也许服务器有一个暂停通知列表,服务工作者可以从那里获取它,或者你可以将它们保存在IndexedDB中。