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服務器