new Notification()与ServiceWorkerRegistration.showNotification()区别及无SW实现通知按钮问询
结论:当前不存在符合通用标准、可在主流浏览器正常运行的、不依赖Service Worker的带操作按钮浏览器通知实现方案。
根据W3C正式的Notifications API规范,通知的操作按钮(actions配置项)仅在Service Worker上下文的registration.showNotification()方法中生效,你提到的普通页面调用new Notification(title, options)的方式,传入的options.actions参数会被所有主流浏览器直接忽略,不会渲染对应的操作按钮。
少数非标准浏览器的历史版本曾经对普通页面的Notification开放过actions支持,但兼容性极差,没有生产使用价值。
如果你觉得Service Worker开发太复杂,其实仅实现带操作按钮的通知不需要掌握完整的Service Worker能力,只需要几行极简代码即可:
- 第一步:创建一个仅包含通知点击处理逻辑的
sw.js文件,不需要实现离线缓存、后台同步等你不需要的功能:
// sw.js 全部代码示例 self.addEventListener('notificationclick', event => { event.notification.close(); // 根据不同按钮的action值处理对应逻辑 switch(event.action) { case 'confirm': // 确认按钮的处理逻辑 break; case 'cancel': // 取消按钮的处理逻辑 break; } });
- 第二步:页面端调用代码和你之前写的完全一致,不需要额外配置:
// 页面端调用代码 navigator.serviceWorker.register('./sw.js') .then(registration => { registration.showNotification('通知标题', { body: '通知内容', actions: [ {action: 'confirm', title: '确认'}, {action: 'cancel', title: '取消'} ] }) });
内容的提问来源于stack exchange,提问作者John Alexander
相关产品推荐
相关产品推荐

