Me gustaría implementar la misma funcionalidad que tiene Gmail hoy en día. Cuando llega un nuevo correo electrónico o llega un nuevo chat, aparece una ventana emergente de notificación y, si hace clic en ella, se enfoca la pestaña con Gmail.
Tengo este codigo:
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { this.cancel(); };
n.show();
Cuando hago clic en la notificación, simplemente desaparece. Ahora necesito agregar algo de código a la función onclick para abrir y enfocar la página que creó esta notificación. Sé que es posible porque GMail lo hace muy bien. Pero no logré buscar en las fuentes de Gmail (están minimizadas y ofuscadas).
¿Alguien sabe cómo hacer esto?
Respuestas:
Puede colocar window.focus () en Google Chrome. Se enfocará en esa ventana cuando se haga clic.
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text'); n.onclick = function(x) { window.focus(); this.close(); }; n.show();
Abrí el inspector en Gmail, agregué el código anterior, lo moví a una pestaña diferente y lo ejecuté. La notificación apareció y, una vez que hice clic, me devolvió a Gmail.
fuente
Uso de notificaciones .
if (typeof Notification !== 'undefined') { alert('Please us a modern version of Chrome, Firefox, Opera or Safari.'); return; } Notification.requestPermission(function (permission) { if (permission !== 'granted') return; var notification = new Notification('Here is the title', { icon: 'http://path.to/my/icon.png', body: 'Some body text', }); notification.onclick = function () { window.focus(); }; });
fuente
window.focus();
Hace el truco ! Debe marcarse como respuesta correcta.window.focus()
no funciona en chrome 60, la solución jazzcat conparent.focus()
obraswindow.focus()
no siempre funciona en las versiones recientes del navegador Webkit (Chrome, Safari, etc.). Pero loparent.focus()
hace.Aquí hay un jsfiddle completo: https://jsfiddle.net/wv0w7uj7/3/
Código:
function notifyMe() { if (Notification.permission !== "granted") Notification.requestPermission(); else { var notification = new Notification('Notification title', { icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png', body: "You've been notified!", }); notification.onclick = function () { parent.focus(); window.focus(); //just in case, older browsers this.close(); }; } }
fuente
this.close
, es mejor llamarevt.target.close
al evento 'onclick':notification.onclick = function (evt) { evt.target.close(); }
No es realmente una buena práctica usar la
onclick
propiedad, use el método paraaddEventListener
javascript vanilla oon
para jQuery.var notify = new Notification('Test notification');
Vainilla:
notify.addEventListener('click', function(e) { window.focus(); e.target.close(); }, false);
jQuery:
$(notify).on('click', function(e) { window.focus(); e.target.close(); });
fuente
Debería ser en
this.close()
lugar dethis.cancel()
, así:var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text'); n.onclick = function(x) { window.focus(); this.cancel(); }; n.show();
fuente