나는 푸시 알림 클릭 이벤트를 처리하는 서비스 노동자가 :Service Worker onClick 이벤트 - 범위가있는 창에서 URL을 여는 방법은 무엇입니까?
self.addEventListener('notificationclick', function (e) {
e.notification.close();
e.waitUntil(
clients.openWindow(e.notification.data.url)
);
});
알림이 데이터에서 URL을 소요하고 새로운 창에 표시되어 있습니다.
코드는 작동하지만 다른 동작이 필요합니다. 사용자가 링크를 클릭하면 서비스 작업자 범위 내에 열려있는 창이 있는지 확인해야합니다. 그렇다면 창에 초점을 맞추고 주어진 URL로 이동해야합니다.
나는 이것을 answer에 확인했지만 정확히 내가 원하는 것은 아니다.
어떻게 할 수 있습니까?
P. 이 코드를 작성했지만 여전히 작동하지 않습니다. 그러나 처음 두 메시지는 로그에 표시됩니다.
self.addEventListener('notificationclick', function (e) {
e.notification.close();
var redirectUrl = e.notification.data.redirect_url.toString();
var scopeUrl = e.notification.data.scope_url.toString();
console.log(redirectUrl);
console.log(scopeUrl);
e.waitUntil(
clients.matchAll({type: 'window'}).then(function(clients) {
for (i = 0; i < clients.length; i++) {
console.log(clients[i].url);
if (clients[i].url.toString().indexOf(scopeUrl) !== -1) {
// Scope url is the part of main url
clients[i].navigate(givenUrl);
clients[i].focus();
break;
}
}
})
);
});
matchAll이 반환하는 클라이언트를 console.log로 봅니다. for 루프 바로 전에. 클라이언트의 길이가 0이고 for 루프가 실행되지 않으면 오른쪽 – pate
예, 다시 유효합니다. 클라이언트가 비어 있으므로 matchUll에 "includeUncontrolled : true"를 추가했습니다. 이제 Service Worker 이벤트 waitUntil()이 'ReferenceError : givenUrl이 정의되지 않았습니다.'와 함께 거부 된 약속이 전달되었습니다. " –