服务器工人被注册两次



我正在使用FCM Web Notification服务,当我调用寄存器功能时:

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);
        });
      });
    }

服务工作者被注册了两次,其中一个是由于此功能,另一个是由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);
});

另外一件事,当我发送测试通知时,我单击第一个消息并正确打开URL,但是在Chrome的同一实例中,所有其他消息我单击打开第一个消息的URL。这个问题不会在Firefox上发生,只是Chrome。我正在使用Chrome版本55

使用Firebase Messaging SDK,您无需致电寄存器。

如果呼叫寄存器,您可以通过致电useviceworker()来使SDK使用服务工作者(请参阅:https://firebase.google.com/docs/docs/reference/reference/js/firebase。消息传递#useViceWorker)

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/sw.js')
    .then(function(registration) {
      messaging.useServiceWorker(registration);
    });
  });
}

SDK为您注册服务工作者的原因是,它设置了一个范围,该范围将阻止其干扰您可能拥有的任何其他服务人员。

关于您的第二期,您是发送不同的URL还是相同的URL?

最新更新