如果我的网页未在任何选项卡中打开,则禁用通知
Posted
技术标签:
【中文标题】如果我的网页未在任何选项卡中打开,则禁用通知【英文标题】:Disable notification if my webpage is not open in any tab 【发布时间】:2021-03-17 09:52:53 【问题描述】:如果我的网站标签已关闭,我想禁用通知。我怎样才能做到这一点?
这是显示 Firebase 推送通知的代码。
const messaging = firebase.messaging();
//Code for show webpage background notification
messaging.setBackgroundMessageHandler(function(payload)
//Code for show notifications
);
//Code for show webpage foreground notification
messaging.onMessage(function(payload)
//Code for show notifications
);
我只想在网页打开时显示通知。如果网页未在任何选项卡中打开,我必须禁用通知。
帮帮我,我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:我认为最接近你想要的是:
-
检测您的页面何时被卸载
window.addEventListener('unload', e => ... )
-
通过您的推送通知管理器取消订阅
来自 MDN 的代码,不是我的
navigator.serviceWorker.ready.then(function(reg)
reg.pushManager.getSubscription().then(function(subscription)
subscription.unsubscribe().then(function(successful)
// You've successfully unsubscribed
).catch(function(e)
// Unsubscription failed
)
)
);
请注意,这需要您在每次加载页面时重新订阅推送服务。
【讨论】:
感谢您的回答。但是,在刷新页面和返回按钮上也会调用卸载事件。而在 chrome 中,卸载事件仅检测用户何时单击窗口中的任何点。 的确如此,但是如果你想用ServiceWorkers来检测是否有人关闭你的页面,AFAIK是唯一的方法,否则我认为@Frank提出的方法是最实用的。【参考方案2】:如果您只想在页面打开时传递通知,请考虑使用 FCM 以外的其他传递机制。我建议看一下Firebase Realtime Database 之类的东西,它可以在不需要服务人员的情况下使用(因为它只在页面打开时工作)。
【讨论】:
以上是关于如果我的网页未在任何选项卡中打开,则禁用通知的主要内容,如果未能解决你的问题,请参考以下文章