2015-04-18 37 views
5

我有以下錯誤,當我試圖在由節點快速V4服務器/服務在Chrome 42中的基本應用註冊服務工作者:註冊服務人員無法與本地主機

拋出:DOMException:無法註冊ServiceWorker:在獲取腳本時收到錯誤的HTTP響應 代碼(404)。 {message:「 註冊ServiceWorker失敗:當 獲取腳本時收到壞HTTP代碼(404)。」,名稱:「NetworkError」,代碼:19,INDEX_SIZE_ERR: 1,DOMSTRING_SIZE_ERR:2 ...}碼:19消息:「無法

下面是註冊碼:

if ('serviceWorker' in navigator){ 
    console.log("SW present !!! "); 

    navigator.serviceWorker.register('worker.js', { 
     //scope: '/toto/' 
    }).then(function(registration){ 
     console.log('Service worker registered : ', registration.scope); 
    }) 
    .catch(function(err){ 
     console.log("Service worker registration failed : ", err); 
    }); 

    } 
+0

請參閱http://www.serviceworker.org/ – benek

回答

9

我認爲你正試圖註冊不存在的腳本,在這種情況下,這個問題涉及請檢查您的腳本。路徑和作用域路徑,也許在腳本所在的目錄中沒有任何'worker.js',如果是這種情況,請提供完整路徑或提供e在同一個目錄下的worker.js。

+0

感謝您的回覆。我沒有在文檔中看到任何conf js文件的描述。你有參考嗎? – benek

+1

我沒有了解conf js文件。您應該在註冊函數中使用正確的scriptURL,如https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register – Paritosh

0

我在使用快速服務器時也出現此錯誤。事實證明,問題出在服務器設置本身,而不是服務工作者註冊碼。我已經告訴我的快遞應用獲取index.html作爲使用默認根:

app.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

但是我沒有告訴表達我希望它能夠使用任何其他文件的位置。在這個階段,我唯一的其他文件是正趴在目錄的根目錄中的服務人員文件,所以我加入這行到服務器的文件解決了這一問題:

app.use(express.static(__dirname + '/')); 

要調試您的問題是否與服務器本身,您可以下載Web Server for Chrome並將其指向您的應用程序的根目錄。檢查服務器是否已啓動並單擊Web服務器URL。如果您的服務人員註冊現在成功,您將知道這是您的快速服務器設置而不是您的服務工作者註冊代碼的問題。