2016-08-25 62 views
6

我目前正在服務工作人員處理瀏覽器中的推送通知。目前我有這個「註冊失敗錯誤」。任何人都可以解決這個問題嗎?檢查client1.html及以下service-worker.js文件:服務人員註冊失敗

錯誤:

SW registration failed with error SecurityError: Failed to register a ServiceWorker: The URL protocol of the current origin ('null') is not supported.

服務worker.js

console.log('Started', self); 
self.addEventListener('install', function(event) { 
    self.skipWaiting(); 
    console.log('Installed', event); 
}); 
self.addEventListener('activate', function(event) { 
console.log('Activated', event); 
}); 
self.addEventListener('push', function(event) { 
    console.log('Push message received', event); 
}); 

client1.html

<!doctype html> 
    <html> 
    <head> 
    <title>Client 1</title> 
    </head> 
    <body> 
    <script> 
    if('serviceWorker' in navigator){ 
     // Register service worker 
     navigator.serviceWorker.register('service-worker.js').then(function(reg){ 
      console.log("SW registration succeeded. Scope is "+reg.scope); 
     }).catch(function(err){ 
      console.error("SW registration failed with error "+err); 
     }); 
    } 
    </script> 
    </body> 
    </html> 
+0

「ServiceWorkerContainer.register」的第一個參數是一個URL。錯誤消息表明您的瀏覽器拒絕使用資源,因爲原始位置爲空 - 對於本地(file://)資源常常發生這種情況。 'service-worker.js'是本地的 - 我敢打賭,這就是爲什麼你會得到跨源數據源問題 – Tibrogargan

+0

謝謝我剛剛通過將我的文件夾放在本地主機內解決了這個問題 –

+0

我沒有看到任何對Pusher的引用在代碼中。爲什麼這個問題有['pusher'](http://stackoverflow.com/questions/tagged/pusher)標籤? –

回答

11

已解決: 首先,服務工作人員只能在https或localhost的安全模式下工作。 它不會在像file://或http這樣的本地資源中工作。

第二個問題是在註冊期間。

 navigator.serviceWorkerContainer.register('service-worker.js').then(function(reg){ 
+0

https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features 根據這個文檔,它應該得到支持: 「安全的起源」是起源(*,本地主機,*) (*,127/8,*,*)至少與以下(方案,主機,端口)模式中的一種相匹配: (*,*,*) (*,*,*) *) (*,:: 1/128,*) (file,*, - ) (chrome-extension,*, - ) –