我正在使用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(...);
})

07-28 00:09