1

以下のスクリプトを使用して Service Worker を登録しています。この Service Worker がプッシュをサポートしているかどうかを確認したいですか? テスト目的で「印刷サービスワーカー」を印刷していますが、コンソールに印刷されていません。私が間違っているところをトリガーするのを手伝ってください。

function register()
{
    if ('serviceWorker' in navigator)
    {
        navigator.serviceWorker.register('service-worker.js', {scope: scope}).then(initialiseState);
    } 
    else {
        console.warn('Service workers aren\'t supported in this browser.');
    }
}

function initialiseState() 
{ 
navigator.serviceWorker.ready.then(function(serviceWorkerRegistration)
        {  console.log('Print Service worker');});
}

事前に感謝

4

2 に答える 2

5

最初に、期待するログが表示されない理由について説明します。

self.clients.claim()Service Worker 内で呼び出さない限り、最初に登録されたときのナビゲーション中に現在の Web ページを制御することはありません。約束に関してnavigator.serviceWorker.readyは、ページを制御する Service Worker が存在するまで解決されません。console.log()この 2 つを組み合わせると、最初にページにアクセスしたときに実行されるとは思いませんが、2 回目以降のアクセスでは実行されると思います (Service Worker が適切にインストールされている場合)。

ページに最初に移動したときに Service Worker にページを制御させたい場合の使用があります。self.clients.claim()

実際の質問に関しては、Service Worker プッシュ サポートの機能を検出する必要があると感じた場合は、解決するオブジェクトのように'pushManager' in registration、どこregistrationにオブジェクトがあるかを確認するだけでよいはずです。ページが Service Worker によって制御されるまで待つ必要はありません。したがって、これは機能するはずです:ServiceWorkerRegistrationnavigator.serviceWorker.register()

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('service-worker.js').then(function(registration) {
    if ('pushManager' in registration) {
      // The service worker supports push
    } else {
      // The service worker doesn't support push
    }
  });
} else {
  // The browser doesn't support service workers
}
于 2015-07-27T14:47:22.420 に答える