我正在使用serviceworker-webpack-plugin在我的reactjs应用程序中创建服务 worker 。
我遵循the example在主线程中注册服务 worker 。我了解到Html5 Notification
在Android chrome上不起作用,因此我使用registration.showNotification('Title', { body: 'Body.'});
而不是new Notification('...')
来推送通知。但是当我在台式机Chrome上对其进行测试时,它会引发此错误
registration.showNotification is not a function
registration.showNotification是否仅在Android chrome上可用,而在桌面上不可用?
public componentDidMount(){
if ('serviceWorker' in navigator &&
(window.location.protocol === 'https:' || window.location.hostname === 'localhost')
) {
const registration = runtime.register();
registerEvents(registration, {
onInstalled: () => {
registration.showNotification('Title', { body: 'Body.'});
}
})
} else {
console.log('serviceWorker not available')
}
}
最佳答案
runtime.register()
返回一个JavaScript Promise,这就是为什么您收到not a function
错误的原因,因为Promises没有showNotification()
方法。
取而代之的是,您必须将.then()
回调链接到它,以获得实际的registration
对象(或使用async / await,这也很酷)。
runtime.register().then(registration => {
registration.showNotification(...);
})