【问题标题】:Delay an HTML5 notification?延迟 HTML5 通知?
【发布时间】:2015-10-11 13:33:02
【问题描述】:

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

在(尤其是)Chrome API 的当前状态下,我是否遗漏了什么或者不可能?

【问题讨论】:

  • 为什么不通过超时处理程序发送通知?
  • @Pointy 这样的事情表明它不起作用:github.com/slightlyoff/ServiceWorker/issues/107 无论如何,这可能意味着服务工作者一直在后台运行,这似乎不太好移动设备。
  • 请参阅github.com/slightlyoff/BackgroundSync/blob/master/… 了解可能的方法,但有一些大的警告:它目前没有在任何浏览器中实现,它不能保证确切的执行时间,它适用于重复事件(因此您需要在第一个事件触发后取消注册)。

标签: javascript html notifications service-worker web-notifications


【解决方案1】:

这对于服务人员来说是可能的,但并不简单,至少在他们目前的形式中是这样。这并不简单,因为服务人员无法让自己保持半小时清醒,或者用setTimeoutsetInterval 唤醒自己。浏览器只会关闭工作程序,并且不会记录任何超时或间隔。您可以通过打开标签中的消息将其唤醒,但您说您不想必须保持打开标签,如果您假设打开标签,那么为什么还要打扰服务人员?正如 Jeff Posnick 在评论中所建议的那样,您可能最终可以使用 Sync 或 PeriodicSync API,但是,正如他也指出的那样,它们尚未实现,并且无论如何也不是真正用于此目的。

可以使用Push API 在当前版本的 Chrome 中完成您想要的操作,但您必须将服务器包含在循环中并设置自己的推送通知服务(即GCM)。大致是这样的:

  • 当您决定延迟通知时,请告知服务器
  • 延迟后,服务器会为您的用户发送推送消息
  • Service Worker 被唤醒以响应推送并创建新通知

这最后一部分会很麻烦,因为目前您实际上无法通过推送发送任何类型的有效负载,因此您的服务工作者将需要某种方式来确定通知应该是什么。也许服务器有一个已暂停通知的列表并且服务工作者可以从那里获取它,或者也许你将它们保存在 IndexedDB 中。

【讨论】:

    【解决方案2】:

    改编自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>
    

    【讨论】:

    • 如果没有其他问题,我会将其标记为正确,但我希望有一些不需要一直保持标签打开的东西——尤其是移动用户不太可能这样做。
    猜你喜欢
    • 2017-06-12
    • 2012-06-04
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多