获取脚本时发生未知错误(Service Worker)

时间:2016-11-11 19:58:05

标签: javascript manifest service-worker offline-caching progressive-web-apps

离线时,我的服务人员收到以下错误:

(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's 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)
  })
}

注册罚款。在我离线之前,我没有遇到错误。

我正在使用带有React的webpack,并在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]'
      }
]

错误未提供有关正在发生的事情的任何信息。

任何人都知道如何解决这个问题?

6 个答案:

答案 0 :(得分:20)

我遇到了完全相同的问题,我花了一个小时试图找出它,结果发现我有一个另一个标签,因为同一个来源左边打开了(所以使用相同的共享服务工作者) )已选中“离线”复选框,并阻止其他标签因某种原因请求sw.js

似乎脱机状态从Service Worker范围内的选项卡泄漏,而其他选项卡没有正确反映或管理,而不是首先脱机的选项卡。

因此,请确保您没有其他客户端运行相同的服务工作者 - 您应该能够在DevTools中找到它们&gt;申请&gt;服务人员。

答案 1 :(得分:2)

在尝试其他操作之前,请检查您的 https证书无效或与您访问的网址不匹配。

例如就我而言,我试图使用已在另一个域中注册的证书访问https:// localhost。

虽然点击“继续”将允许我进入该网站,但此确切错误将被打印到控制台:

获取脚本时发生未知错误

答案 2 :(得分:0)

对我来说,当我在安装时将sw.js添加到缓存中时,此错误消失了。只是忘了那样做,但它解决了这个问题。

答案 3 :(得分:0)

我在Angular项目中工作时遇到了这个问题。我的问题是我使用的是Angular CLI的内置ng serve -prod命令。

为了使它工作,我使用ng build -prod然后使用http-server托管生成的dist文件夹

答案 4 :(得分:0)

在Chrome中,我要做的是检查选项Bypass for network,然后重新加载。

Dev tools print

答案 5 :(得分:0)

在我们的案例中,仅当Android上的Chrome 75 + Webview + Service Worker时才从2019年6月开始。这是完全相同的现象:https://bugs.chromium.org/p/chromium/issues/detail?id=977784