7

当进入脱机状态,我通过我的服务人员会收到以下错误:未知错误

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

它注册不错。直到我离线时才会遇到错误。

我使用的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]' 
     } 
] 

误差不提供任何信息,所发生的事情。

任何人有任何想法如何解决这个问题?

+0

有一个类似的问题举办所产生的DIST文件夹。该错误仅在离线模式下出现。我认为这个错误并不是一个表演阻止者。 – Rexford

+0

那么该网站现在不适用于所有离线。我得到了恐龙,所以是的,如果你想要做的是让它脱机工作,那么它就是个不错的选择。 – MLyck

+0

你想抓取sw文件吗?请问为什么?我有一个想法,为什么这个错误,但我想澄清更多。 –

回答

17

我有完全相同的问题,我花了一个小时试图找出它,结果证明我有另一个标签为相同的原点左打开某处(所以使用相同的共享服务工作者)由于某种原因,“离线”复选框被选中并且阻止了另一个标签请求sw.js

看起来脱机状态是从Service Worker范围内的标签泄漏,而没有被正确反映,也没有被其他标签管理,而不是先被脱机的标签。

因此,请确保您没有其他客户端运行相同的服务工作者 - 您应该能够在DevTools>应用程序>服务工作者中找到他们。

+1

这可能是事实! 我从来没有想过它。但是在我关闭了所有内容后,删除了我的Build文件夹。重新启动我的电脑,重建网站。它运行良好。 我没有改变一件事。所以这听起来像是问题最可能的原因。感谢分享! – MLyck

+0

谢谢。这正是原因,我在另一个带有Offline的选项卡中打开了Airhorner示例,而另一个本地站点在另一个端口上的另一个选项卡中打开。 –

+0

我将Angular CLI版本从测试版18切换到RC1,并且任何时候我创建了一个新的应用程序,很快我会得到这个相同的错误。我按照这里解释的那样去除了工人,这似乎解决了我的问题 –

0

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

0

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

要使其工作,我用ng build -prod,然后使用HTTP服务器