我一直在寻找HTML通知和服务工作者的状态,并想知道 - 是否有可能显示延迟通知?基本上,我希望能够说“在30分钟内提醒我”(或其他),然后在30分钟后向用户推送通知。这可能会立即计划,但我没有看到任何允许它的功能。延迟HTML5通知?
我是否错过了某些东西,或者在特别是Chrome API的当前状态下是不可能的?
我一直在寻找HTML通知和服务工作者的状态,并想知道 - 是否有可能显示延迟通知?基本上,我希望能够说“在30分钟内提醒我”(或其他),然后在30分钟后向用户推送通知。这可能会立即计划,但我没有看到任何允许它的功能。延迟HTML5通知?
我是否错过了某些东西,或者在特别是Chrome API的当前状态下是不可能的?
<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>
如果没有别的东西,我会将其标记为正确的,但是我希望有一些事情不需要让标签始终保持打开状态 - 特别是在移动人员不太可能这样做的时候。 – Alastair
这是可能的,但不是直接与服务人员,至少在其目前的形式。这并不简单,因为服务人员无法保持半小时的清醒状态,或以setTimeout
或setInterval
唤醒自己。浏览器会关闭工作人员,并且不会记录任何超时或间隔。你可以用打开的标签中的信息来唤醒它,但是你说你不需要保持开放标签,并且如果你假设一个开放的标签,那么为什么即使打扰服务工作者呢?正如Jeff Posnick在评论中所建议的那样,您最终可能会使用Sync或PeriodicSync API,但是,正如他还指出的那样,它们还没有实现,因此无论如何都不是真正用于此目的。
您可以完成您在使用Chrome的Push API当前版本想要的东西,但你必须包括在循环中的服务器,并为自己设定了一个推送通知服务(即GCM)。下面是它如何工作,大致为:
最后这部分将是一个麻烦,因为目前你不能真正以推动发送任何类型的有效载荷,所以你的服务人员将需要一些搞清楚通知应该是什么的方法。也许服务器有一个暂停通知列表,服务工作者可以从那里获取它,或者你可以将它们保存在IndexedDB中。
为什么不直接通过超时处理程序发送通知? – Pointy
@像这样的事情表明它不会工作:https://github.com/slightlyoff/ServiceWorker/issues/107在任何情况下,它可能意味着服务人员不断在后台运行,对移动设备看起来非常好。 – Alastair
请参阅https://github.com/slightlyoff/BackgroundSync/blob/master/explainer.md#periodic-synchronization了解可能的方法,但有几点需要注意:目前尚未在任何浏览器中实现,但它不会为您提供一个关于确切执行时间的保证,它意味着重复发生的事件(所以你需要在第一个事件触发后取消注册)。 –