Javascript 在没有后端服务器的情况下,如何在24小时后触发桌面通知?
假设:Javascript 在没有后端服务器的情况下,如何在24小时后触发桌面通知?,javascript,notifications,service-worker,client-side,Javascript,Notifications,Service Worker,Client Side,假设: 用户已允许在我的网站上发送通知 服务人员已安装并准备就绪 用户将客户端提醒设置为24小时后提醒 没有后端服务或服务器将通知推送到用户 如果没有后端服务器推送桌面通知,如何触发该通知?这可能吗 如果提供了超时/间隔,且尚未准备好使用,则浏览器将关闭service worker。在将来的某个指定时间,是否没有仅客户端的方法来触发通知 是否存在严格不是“推送通知”的桌面通知?推送通知本质上是从服务器推送的。可以从客户端触发通知吗?我认为目前不可能 推送通知在其摘要中指定: 本文档描述了一个简单
是否存在严格不是“推送通知”的桌面通知?推送通知本质上是从服务器推送的。可以从客户端触发通知吗?我认为目前不可能 推送通知在其摘要中指定: 本文档描述了一个简单的real-
将事件计时到用户代理。此方案使用HTTP/2服务器推送 这意味着需要一个支持HTTP/2推送的服务器 我很喜欢对Javascript大发雷霆,而且我似乎找不到一个可以在浏览器中运行的HTTP2服务器的Javascript实现(node就是这样),这让我感到羞耻,嘲笑它也太棒了
< P> >,查找名号,HTTP2-Serv.JS不见了。
你也许可以考虑使用。但是,这只对使用相同设备和浏览器的用户有利
下面是一个在页面加载时启动的函数。如果希望它在整个会话中定期出现,可以将其包装到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');
}
}
};
当用户选择次日提醒时,您可以设置通知计时器
:
localStorage.setItem(notificationTimer, Date.now());
您必须对次日提醒不能跨浏览器或设备工作提出一些警告,这可能是可取的,也可能是不可取的。在撰写本文时(2019年1月3日): 没有一种“桌面通知”不是严格意义上的“推送通知”,并且可以跨平台正常工作
- 如果应用程序不在后台工作,则无法触发“桌面通知”
- 服务人员不应使用计时器,将被关闭
- 操作系统或其他实用软件也可能建议甚至关闭您的后台应用程序
- 在将来的某个精确时间,没有仅客户端的方法来触发通知。目前有太多的理由让组织不允许这种情况发生
- 每个访问者都需要订阅推送通知
- 外部记录客户偏好(例如:使用一些云计划)
- 使用外部计划服务触发推送通知服务
AS <强>使用PWA通知< /强>的另一种选择,您可能希望正确地考虑使用不同的通知服务。例如FCM
想法可以是在外部保存用户的通知首选项,并在达到预定时间时通过另一个云服务触发FCM通知 显然,只有当用户连接到网络时,这些通知才会起作用。然而,对于任何需要网络访问的通知服务来说,情况也是如此我希望以上的帮助,干杯和快乐的编码 假设您网站上的通知数据不会从服务器发送。使用本地存储将是一条出路 您可以存储一个变量,以帮助跟踪用户访问您的网站时何时显示通知:
localStorage.setItem("lastNotification", Date.now());
因此,您可以有一个脚本来执行以下操作:
function notificationHelper(){
var lastTime = localStorage.getItem("lastNotification");
if(Date.now - lastTime > 86400000){
//Logic to show notication here
//set a new time at the end of the logic
}
//Otherwise Do Nothing
}
了解“推送”通知。我认为本质上推送通知需要后端服务器来推送。我希望有一个桌面通知,可以在特定的时间触发,作为提醒或警报。我认为服务工作者目前不可能这样做,因为浏览器关闭非活动工作者会忽略超时或间隔。我希望得到证实,也许确实如此。如果你发现了什么,请把它贴出来。当然可以。这是一个很好的选择@Joe,除了我认为OP需要更多的“推送通知”之外一种解决方案-即,即使在用户不浏览网站的情况下也有效的解决方案。Mortz关于即使用户不浏览网站也希望收到通知的说法是正确的。呃,这个答案是社区自动授予的赏金,因为我延迟了选择。我仍然在寻找一种方法来触发24小时后的通知。打开网站不应该是一项要求,但如果浏览器是打开的,也可以。也许有一个br