当显示我的网络推送通知时,我在我的选项中添加了一个操作,这样用户就可以要求在30分钟后再次收到通知。
const options = {
...,
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
....
}然后我处理service worker中的操作:
self.addEventListener('notificationclick', function(event) {
if (!event.action) return
switch (event.action) {
...
case 'remind-action':
event.notification.close()
event.waitUntil(
new Promise((resolve, reject) => {
setTimeout(() => {
const options = {
...
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
...
}
self.registration.showNotification('Reminder', options)
resolve(true)
}, 30 * 60 * 1000)
})
)
break
}
})如果有办法重新发出推送事件就好了。
上面代码的问题是,它不会在30分钟后显示通知,但是如果我将超时设置为1分钟,它就可以正常工作。
我认为有些地方是Chrome忽略了event.waitUntill而扼杀了setTimeout。
是什么导致了这个问题?我如何解决这个问题?
发布于 2019-09-14 17:12:19
浏览器将自动和故意限制您的setTimeouts,以防止滥用和例如。跟踪用户。换句话说,你不能只在客户端实现你想要的东西。
要再次(可靠地)显示通知,您需要从服务器再次发送通知。您将ofc通知服务器,用户希望在x分钟左右得到提醒。
https://stackoverflow.com/questions/57922641
复制相似问题