我的站点使用从未在移动设备上工作过的桌面通知,但最近我在Android 4.4上开始收到Chrome版本42.0.2311.108中的以下异常:
Failed to construct 'Notification': Illegal constructor. Use ServiceWorkerRegistration.showNotification() instead. TypeError: Failed to construct 'Notification': Illegal constructor. Use ServiceWorkerRegistration.showNotification() instead.
我的通知代码很简单,在检查用户是否已授予权限之后,我初始化了一个新的notification对象,如下所示:
var notification = new Notification(messageOptions.title, { icon: messageOptions.icon });
我如何修改这段代码以使用ServiceWorkerRegistration.showNotification (也就是undefined
)来支持移动版Chrome中的通知,或者如果这不可能的话,就可以进行特性检测,如果还不支持这一点,就可以防止出现异常。
发布于 2015-04-28 09:39:44
参见Chrome问题跟踪器上的crbug.com/481856:
new Notification()
是在反对的道路上,因为它隐含地假定页面将超过通知,这在移动设备上是非常不可能的(而且在桌面上也远远不能保证)。 因此,我们永远不会在Android上实现它。我们可能有一天也会在桌面上删除它,经过一段时间的反对。 网站在任何时候都应该使用ServiceWorkerRegistration.showNotification()
(见规范)。 我能想到的检测new Notification()
的最佳方法是尝试它(在获得权限之前)并捕获错误: 函数isNewNotificationSupported() { if (. call 2‘s !Notification.requestPermission)返回false;if (Notification.permission ==’e‘)抛出新错误(’在*调用Notification.requestPermission()之前只必须调用它*,否则此功能检测将使用户陷入实际通知‘’);尝试{新通知(‘’);} catch (e) { if (e.name == 'TypeError')返回false;}返回true;} 然后,您可以这样使用它: 如果(window.Notification && Notification.permission ==‘for’){ //我们只会提示用户如果支持新//通知(见下文),那么假设它是受支持的。如果(doStuffThatUsesNewNotification()){ // Notification受支持,那么请提示用户获得许可。showOptInUIForNotifications();}
发布于 2022-02-08 05:10:10
根据这
Note
:尝试使用Notification()构造函数在ServiceWorkerGlobalScope中创建通知将引发错误。
如果要在服务工作人员中发送通知,请使用self.registration.showNotification()
。请参阅https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification
https://stackoverflow.com/questions/29774836
复制相似问题