pestaña de enfoque de los trabajadores de servicio: los clientes están vacíos en la notificación
Tengo un escenario de trabajador de servicio común, donde quiero obtener un clic de notificación y enfocar la pestaña de donde proviene la notificación. Sin embargo, la variable clientes siempre está vacía, su longitud es 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('/');
}
}));
});
Y el registro es este:
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 muestra que el registro y la instalación están bien. Sin embargo, cuando se envía una notificación, clientList está vacío. He intentado eliminar el tipo de filtro: 'ventana' pero el resultado sigue siendo el mismo. Como los clientes están vacíos, siempre se abre una nueva ventana. ¿Qué estoy haciendo mal?