延迟HTML5通知?

Ala*_*air 2 javascript html5 notifications web-notifications service-worker

我一直在关注HTML通知和服务工作者的状态,并且想知道 - 是否可以显示延迟通知?基本上,我希望能够说"在30分钟内提醒我"(或其他),然后在30分钟后向用户发送通知.这可以立即安排,但我没有看到任何允许它的功能.

我是否遗漏了某些东西,或者在目前的(特别是)Chrome API状态下是不可能的?

Bre*_*hie 5

这对服务工作者来说是可能的,但不是直截了当的,至少目前的形式是这样.这不是直截了当的,因为服务工作者不能让自己保持清醒半小时或者用一个setTimeout或者唤醒自己setInterval.浏览器将关闭工作人员并且不会记录任何超时或间隔.您可以通过打开的选项卡中的消息唤醒它,但是您说您不必必须保持打开的选项卡,如果您假设打开选项卡,那么为什么甚至打扰服务工作者呢?正如Jeff Posnick在评论中建议的那样,你最终可能会使用Sync或PeriodicSync API,但是,正如他也指出的那样,它们尚未实现,并且无论如何都不是真正的用途.

可以使用Push API在当前版本的Chrome中完成您想要的操作,但您必须在循环中包含服务器并使用推送通知服务(即GCM)进行自我设置.以下是它的工作原理,大致如下:

  • 当您决定延迟通知时,请让服务器知道它
  • 延迟一段时间后,服务器会为您的用户发送推送消息
  • 响应推送而唤醒服务工作者并创建新通知

最后一部分将是一个麻烦,因为目前你实际上不能通过推送发送任何类型的有效负载,所以你的服务工作者将需要一些方法来确定通知应该是什么.也许服务器有一个延后通知列表,服务工作者可以从那里获取它,或者你可能将它们保存在IndexedDB中.


Osw*_*ald 1

改编自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>
Run Code Online (Sandbox Code Playgroud)