Основная проблема, которую я вижу, заключается в том, что вы присоединяете EventListener к window
, который будет выполняться при 'загрузке'. Поскольку это событие, скорее всего, уже запущено, поскольку вы можете нажать на кнопку, ПО не загружается.
Попробуйте удалить часть обработчика событий, чтобы напрямую вызвать функцию регистрации.
Тогда это будет выглядеть примерно так:
function registerSW() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js')
//...
}
}
Другая проблема, которую я вижу, заключается в том, что вы пытаетесь установить состояние, непосредственно назначая его. В ответ вы не должны обращаться к этому состоянию, а просто вызывать this.setState
следующим образом:
// ...
.then(swReg => {
console.log('SW registered');
this.setState({ swReg: swReg });
})
// ...