如何在没有后端服务器的情况下24小时后触发桌面通知?

Sco*_*ott 9 javascript notifications client-side service-worker

假设:

  1. 用户已在我的网站上发布通知.
  2. 服务工作者已安装并准备就绪.
  3. 用户设置客户端提醒,以便在24小时后提醒.
  4. 没有后端服务或服务器将通知推送给用户.

如果没有后端服务器推送该通知,我该如何触发桌面通知?这可能吗?

如果提供超时/间隔并且web-alarm/task-scheduler规范尚未准备好使用,则服务工作者将被浏览器关闭.是否没有客户端方法在将来的某个指定时间触发通知?

桌面通知是否严格不是"推送通知"?本质上,推送通知是从服务器推送的.可以从客户端触发通知吗?

Ped*_*ues 8

我不相信这是可能的.

推送通知在RFC8030中从其摘要中指定:

本文档描述了
向用户代理传递实时事件的简单协议.此方案使用HTTP/2服务器推送.

这意味着需要支持HTTP/2推送的服务器.

我喜欢在Javascript上咆哮,我似乎无法找到在浏览器中运行的HTTP2服务器的Javascript实现(对于节点而言),这对我来说是一种耻辱,并且会很棒嘲笑关于.

因此,寻找名气,http2-server.js缺失.


Gen*_*ser 5

您可以考虑使用localStorage.但是,这仅对使用相同设备和浏览器的用户有利.

下面是一个在页面加载时启动的功能.如果您希望它在整个会话期间定期发生,您可以将其包装setInterval并定期检查.这是假设它需要在24小时后到毫秒.

// on page load
window.onload = () => {
    const dayMs = 24*60*60*1000; // 1 day in milliseconds
    const notificationTimer = localStorage.getItem('notificationTimer');
    if(notificationTimer){
        const sendNotification = (Date.now() - (new Date(notificationTimer)).getTime()) > dayMs;
        if(sendNotification){
            const notification = new Notification('Displaying next day reminder from yesterday');
        }
    }

};
Run Code Online (Sandbox Code Playgroud)

当用户选择第二天提醒时,您可以设置notificationTimer:

localStorage.setItem(notificationTimer, Date.now());
Run Code Online (Sandbox Code Playgroud)

你必须对第二天的提醒做出一些警告,这些提醒不能在浏览器或设备上工作,这可能是也可能不是.