2015-08-11 2 views
12

Ich versuche Browserbenachrichtigung für ein Projekt einzurichten, an dem ich gerade arbeite. Der Code, den ich bisher habe, ist:Wie wird der Browser-Tab automatisch aktiviert, wenn Sie in Chrome auf die Browserbenachrichtigung klicken?

// 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); 

Die Benachrichtigungen arbeiten mit diesem Code außer einer Sache in Ordnung. In Chrome wird beim Klicken auf die Benachrichtigung der Fokus nicht auf das Browserfenster gesetzt. In Firefox ist dieses Verhalten standardmäßig vorhanden und funktioniert ohne den oben definierten Klick-Handler. Ich habe dies für Chrome für die Lösung gesucht und gefunden diese:

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?

jedoch die vorgeschlagenen akzeptierten Lösungen haben für mich nicht - das Ereignis ausgelöst wird, aber der Fokus ist nicht gesetzt.

Hat jemand irgendwelche Vorschläge, wie man dieses Verhalten richtig macht?

Chrome-Version: Version 44.0.2403.130 m

Firefox-Version: 40,0

+0

Sie jemals eine Lösung finden? Ich habe ein ähnliches Problem (nicht im Zusammenhang mit Benachrichtigungen, aber immer noch mit mir verlieren und nicht in der Lage sein, Tastatur Fokus auf eine Registerkarte zu bekommen). –

+0

@QuinxyvonBesiex Nein, habe ich nicht. Wenn Sie es finden, antworten Sie bitte hier ... – Marko

+0

Ich veröffentlichte eine aktualisierte Antwort hier http://Stackoverflow.com/a/40964355/714733 @Marko – jazzcat

Antwort

2

Es ist eine hacky Lösung, aber wenn Sie einen Service Arbeitnehmer, Sie so etwas tun könnte.

in der Client-Seite:

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

Im Service-Arbeiter:

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

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