服务器工作者已注册两次

jaa*_*lah 5 javascript web-notifications firebase service-worker firebase-cloud-messaging

调用register函数时,我正在使用FCM Web通知服务:

if ('serviceWorker' in navigator) {
         window.addEventListener('load', function() {
        navigator.serviceWorker.register('/sw.js').then(function(registration) {
          // Registration was successful
          console.log('ServiceWorker registration successful with scope: ', registration.scope);
        }).catch(function(err) {
          // registration failed :(
          console.log('ServiceWorker registration failed: ', err);
        });
      });
    }
Run Code Online (Sandbox Code Playgroud)

服务工作者被注册两次,一次是由于此功能,一次是通过FCM脚本注册。这是我的服务人员代码:

importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js');

    'messagingSenderId': '<my senderid>'
});

const messaging = firebase.messaging();


messaging.setBackgroundMessageHandler(function (payload) {


    self.addEventListener('notificationclick', function (event) {
        event.notification.close();

        var promise = new Promise(function (resolve) {
            setTimeout(resolve, 1000);
        }).then(function () {
            return clients.openWindow(payload.data.locator);
        });

        event.waitUntil(promise);
    });

    var notificationTitle = payload.data.title;
    var notificationOptions = {
        body: payload.data.body,
        icon: payload.data.icon
    };
    return self.registration.showNotification(notificationTitle,
        notificationOptions);
});
Run Code Online (Sandbox Code Playgroud)

还有一件事,当我发送测试通知时,我单击第一条消息,它会正确打开URL,但在Chrome的同一实例中,我单击的所有其他消息都会打开第一条消息的URL。在Firefox(仅Chrome)上不会发生此问题。我正在使用Chrome版本55