2015-08-11 9 views
12

Sto tentando di impostare la notifica del browser per un progetto su cui sto lavorando. Il codice che ho finora è:Come attivare automaticamente la scheda del browser quando si fa clic sulla notifica del browser in 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); 

Le notifiche funzionano bene con questo codice tranne che per una cosa. In Chrome, facendo clic sulla notifica non viene impostato lo stato attivo sulla finestra del browser. In Firefox questo comportamento è nativo e può funzionare senza il gestore di clic sopra definito. Ho cercato la soluzione per questo per Chrome e trovato questi:

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?

Tuttavia le soluzioni accettate suggeriti non funzionano per me - l'evento viene attivato, ma la messa a fuoco non è impostato.

Qualcuno ha qualche suggerimento su come farlo funzionare correttamente?

versione Chrome: La versione 44.0.2403.130 m

versione di Firefox: 40.0

+0

mai trovare una soluzione? Sto riscontrando un problema simile (non correlato alle notifiche ma continuo a perdere e non riesco a reimpostare la tastiera su una scheda). –

+0

@QuinxyvonBesiex No, non l'ho fatto. Se lo trovi per favore rispondi qui ... – Marko

+0

Ho postato una risposta aggiornata qui http://stackoverflow.com/a/40964355/714733 @Marko – jazzcat

risposta

2

È una soluzione hacky, ma se hai registrato un lavoratore servizio che si poteva fare qualcosa di simile.

Nella pagina client:

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

Nella operaio di servizio:

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

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