2016-04-06 12 views
2

ServiceWorker'ı kaydettikten sonra" navigator.serviceWorker.controller "öğesinin her zaman boş olduğunu sorun."navigator.serviceWorker.controller.postMessage" işlevini kullanacaktır "TypeError:" 'PostMessage' özelliği okunamıyor "null

Ben hizmet işçisi, ama "navigator.serviceWorker.controller" bazı mesaj göndermek için "postMessage" kullanmak istiyorum Alway, boş dönmek ve bir hata göstermek "TypeError: boş malı 'postMessage' okunamıyor". Bazen

Ben bu konuda nasıl başa emin değilim "navigator.serviceWorker.controller.postMessage" ama bazen "navigator.serviceWorker.controller" dönüş null adlı, kullanabilirsiniz ...

Ben biraz araştırma yapın, ama yine de sorunumu çözemiyorum ...

Bu durum hakkında herhangi bir fikriniz var mı?

sayesinde Terry İşte

benim yarattığım bir test sayfası. https://terrylee7788.github.io/test_web_worker.html

cevap

2

Kullanım navigator.serviceWorker.ready koşulu-`.ready` söz navigator.serviceWorker.controller`` önce çözebilirsiniz bir ırka maalesef açık

navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) { 
 
    // Let's see if you have a subscription already 
 
    return serviceWorkerRegistration.pushManager.getSubscription(); 
 
}) 
 
.then(function(subscription) { 
 
    if (!subscription) { 
 
    // You do not have subscription 
 
    } 
 
    // You have subscription. 
 
    // Send data to service worker 
 
    navigator.serviceWorker.controller.postMessage({'data': dataToServiceWorker}); 
 

 
})

+0

ayarlandı. Bazı geçici çözümler içeren https://github.com/slightlyoff/ServiceWorker/issues/799 adresine bakın. –

+0

Yardımın için teşekkürler :) – TerryLee

+0

Sen bir hayat kurtarıcı adamsın! Teşekkürler! – anosikeosifo