2017-09-22 45 views
0

我對服務人員和客戶端通信有疑問。我正在看這篇文章和其他博客,但他們都沒有工作。我在Chrome最新版本中遇到錯誤。服務人員 - 在控制器上沒有postMessage方法

Communcation between service worker and web page

我嘗試使用navigator.serviceWorker.controller.postMessage({'command': 'trimCaches'});

但我得到一個錯誤在Chrome中,無法讀取的不確定

財產 '控制器'。進一步調查顯示控制器中沒有可用的postMessage方法。誰能幫我嗎。

我的要求是發送一些消息/數據給服務人員。

回答

1

此錯誤,「無法讀取的未定義的屬性‘控制器’」,告訴沒有在導航可用serviceWorker。換句話說,沒有服務工作者已經在頁面上註冊過。這可能是因爲沒有任何內容,頁面剛剛加載或註冊過程中出現錯誤。由於錯誤信息清楚地表明導航器中沒有serviceWorker,因此我不能完全確定你的意思,因爲有不能成爲調查的控制器。

我猜你在調用navigator.serviceWorker.controller.postMessage()時註冊不完整。我建議你註冊一個SW並在SW腳本中包含消息接收邏輯。然後,在加載頁面並從開發工具檢查SW已經真正註冊後,您可以在瀏覽器的控制檯中使用postMessage API。

確保只調用控制器上的postMessage的另一種方法是將該片段的邏輯包含在serviceWorker.register()Promise處理程序中。

這可能是對你的幫助,也https://serviceworke.rs/message-relay.html

+0

偉大的答案,建立在此略傑夫斯回答類似的問題我貼不是很久以前。我認爲這可能會有所幫助! https://stackoverflow.com/questions/46173712/best-practice-for-instant-claim-of-a-page-by-service-worker –

相關問題