Неизвестная ошибка произошла при извлечении script (Service Worker)

При переходе в автономный режим мой служебный работник получает следующую ошибку:

(unknown) #3016 An unknown error occurred when fetching the script

мой сервисный работник выглядит следующим образом:

var version = 'v1'

this.addEventListener('install', function(event){
  event.waitUntil(
     caches.open(version).then(cache => {
       return cache.addAll([
         'https://fonts.googleapis.com/icon?family=Material+Icons',
         'https://fonts.googleapis.com/css?family=Open+Sans:400,600,300',
         './index.html'
       ])
     })
   )
})

this.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(resp) {
      // if it not in the cache, server the regular network request. And save it to the cache
      return resp || fetch(event.request).then(function(response) {
        return caches.open(version).then(function(cache) {
          cache.put(event.request, response.clone())
          return response
        })
      })
    })
  )
})

Он находится в каталоге верхнего уровня, рядом с манифестом, импортирующим как это в index.html:

<link rel="manifest" href="/manifest.json">

Я импортирую сервисного работника в свой файл js ввода. И зарегистрируйте его сразу после.

require('tether-manifest.json')
import serviceWorker from 'sw'

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register(serviceWorker)
  .then(() => {
    // registration worked
  }).catch(error => {
    throw new Error(error)
  })
}

Он регистрируется в порядке. Я не сталкиваюсь с ошибкой, пока не перейду в автономный режим.

Я использую webpack с React и делаю следующее в webpack, чтобы скопировать мой файл sw.js в папку dist:

loaders: [
      { // Service worker
        test: /sw\.js$/,
        include: config.src,
        loader: 'file?name=[name].[ext]'
      },
      { // Manifest
        test: /manifest\.json$/,
        include: config.src,
        loader: 'file?name=[name].[ext]'
      }
]

Ошибка не дает никакой информации о том, что происходит.

Кто-нибудь знает, как это исправить?

Ответ 1

У меня была точно такая же проблема, я потратил час, пытаясь понять это, и оказалось, что у меня была другая вкладка для того же источника, что и открытая где-то (так что с помощью того же общего рабочего службы), в котором установлен флажок "Офлайн", и по какой-то причине не удалось запросить другие вкладки sw.js.

Похоже, что автономное состояние протекает со вкладки в области Service Worker, не будучи должным образом отраженным или управляемым другими вкладками, чем тот, который был сначала отключен.

Поэтому убедитесь, что у вас нет других клиентов, работающих с одним и тем же Работодателем - вы должны найти их в DevTools > Application > Service Workers.

Ответ 2

Для меня эта ошибка исчезла, когда я добавил sw.js в кеш при установке. Просто забыли сделать это, но он решил проблему.

Ответ 3

У меня была эта проблема во время работы в проекте Angular. Моя проблема заключалась в том, что я использовал Angular встроенную команду CLI ng serve -prod.

Чтобы он работал, я использовал ng build -prod, а затем размещал результирующую папку dist с помощью http-server

Ответ 4

В Chrome я проверил опцию Bypass for network и затем смог перезагрузить.

Dev tools print

Ответ 5

В нашем случае это началось с июня 2019 года только в том случае, если Chrome 75 + webview + сервисный работник на Android. Это было точно такое же явление: https://bugs.chromium.org/p/chromium/issues/detail?id=977784