2015-08-11 20 views
12

Próbuję skonfigurować powiadomienie przeglądarki dla projektu, nad którym pracuję. Dotychczasowy kod to:Jak włączyć kartę przeglądarki z automatycznym ustawianiem ostrości po kliknięciu powiadomienia o przeglądarce w przeglądarce Chrome?

// Notification permissions logic handled before... 
var notification = new Notification('Title', { body: 'Message' }); 
notification.onclick = function (e) { 
    window.focus(); 
    // this.cancel(); 
}; 
setTimeout(notification.close.bind(notification), 5000); 

Powiadomienia działają poprawnie z tym kodem, z wyjątkiem jednej rzeczy. W Chrome kliknięcie powiadomienia nie ustawia fokusu w oknie przeglądarki. W Firefoksie to zachowanie jest rodzime po wyjęciu z pudełka i działa poprawnie bez zdefiniowanej powyżej obsługi kliknięcia. Mam spojrzał na rozwiązanie tego problemu dla Chrome i znaleźć te:

How to get focus to the tab when a desktop notification is clicked in Firefox?

How to get focus to a Chrome tab which created desktop notification?

jednak je przyjęte rozwiązania nie działają na mnie - zdarzenie jest wywoływane, ale ostrość nie jest ustawiona.

Czy ktoś ma jakieś sugestie, jak zrobić to poprawnie?

wersja Chrome: Wersja 44.0.2403.130 m

wersja Firefox: 40,0

+0

kiedykolwiek znaleźć rozwiązanie? Mam podobny problem (niezwiązany z powiadomieniami, ale wciąż ze mną przegrywający i nie mogąc ponownie ustawić ostrości klawiatury na kartę). –

+0

@QuinxyvonBesiex Nie, nie mam. Jeśli go znajdziesz, odpowiedz na to tutaj ... – Marko

+0

Wysłałem zaktualizowaną odpowiedź tutaj http://stackoverflow.com/a/40964355/714733 @Marko – jazzcat

Odpowiedz

2

Jest to hacky rozwiązanie, ale jeśli jesteś zarejestrowany pracownika serwisowego można zrobić coś takiego.

Na stronie klienta:

yourServiceWorkerRegistration.showNotification('Title', { 
    body: 'Message', 
}); 

W pracownika serwisu:

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

    event.waitUntil(
    clients.matchAll({ 
     type: "window", 
    }) 
    .then(clientList => { 
     if (clientList.length) { 
     clientList[0].focus(); 
     } 
    }) 
); 
}); 
Powiązane problemy