egisterkarte "@serviceworkers focus": Clients sind bei Benachrichtigung leer. Klicken Sie auf

Ich habe ein gewöhnliches Servicearbeiter-Szenario, in dem ich einen Benachrichtigungsklick abfangen und die Registerkarte fokussieren möchte, von der die Benachrichtigung stammt. Die Variable clients ist jedoch immer leer, ihre Länge ist 0

console.log("sw startup");
self.addEventListener('install', function (event) {
    console.log("SW installed");
});

self.addEventListener('activate', function (event) {
    console.log("SW activated");
});
self.addEventListener("notificationclick", function (e) {
    // Android doesn't automatically close notifications on click 
    console.log(e);
    e.notification.close();
  
    // Focus tab if open
    e.waitUntil(clients.matchAll({
        type: 'window'
    }).then(function (clientList) {
        console.log("clients:" + clientList.length);
        for (var i = 0; i < clientList.length; ++i) {
            var client = clientList[i];
            if (client.url === '/' && 'focus' in client) {
                return client.focus();
            }
        }

        if (clients.openWindow) {
            return clients.openWindow('/');
        }
    }));
    
});

Und die Registrierung ist diese:

 this.doNotify = function (notification) {      
        if ('serviceWorker' in navigator) {
            navigator.serviceWorker.register('sw.js').then(function (reg) {
               
                requestCreateNotification(notification, reg);
            }, function (err) {
                console.log('sw reg error:' + err);
            });
        }
   ...
   }

chrome: // serviceworker-internals / output zeigt, dass Registrierung und Installation in Ordnung sind. Wenn jedoch eine Benachrichtigung gesendet wird, ist clientList leer. Ich habe versucht, den Filtertyp 'window' zu entfernen, aber das Ergebnis ist immer noch dasselbe. Da Clients leer sind, wird immer ein neues Fenster geöffnet. Was mache ich falsch

Antworten auf die Frage(4)

Ihre Antwort auf die Frage