2010-04-24 49 views
14

Tengo un cliente de chat JavaScript ejecutándose en una pestaña del navegador (llámalo pestaña A). Ahora cuando llega un mensaje, el usuario puede estar en otra pestaña del navegador (llámala pestaña B). Estoy buscando maneras de cambiar el enfoque de la pestaña B a mi cliente de chat (pestaña A) cuando llegue ese mensaje.Cómo cambiar el foco del navegador de una pestaña a otra

No he podido encontrar la manera de hacerlo.

+0

En este punto, cambiar el enfoque de una pestaña a otra podría lograrse utilizando la API ServiceWorker. Sin embargo, de alguna manera sería un hack. –

Respuesta

15

Es no posible - debido a problemas de seguridad.

a menos que por "tab" se quiere decir una ventana y una ventana emergente que (debido a las preferencias del navegador) se abren en una nueva pestaña. Si este es el caso, entonces sí puede.

//focus opener... from popup 
window.opener.focus(); 

//focus popup... from opener 
yourPopupName.focus(); 
+1

window.opener.focus() no funciona para mí cuando se pestañas http://stackoverflow.com/questions/17237542/how-to-set-focus-to-child-and-opener-windows-when-tabbed – magritte

+0

The la función de enfoque es jQuery, ¿verdad? – DerpyNerd

+0

@RobbieVercammen no el método focus() llamado aquí es un método en el objeto ventana. (Similar al foco nativo() en los campos del formulario) – scunliffe

5

lo mejor que podría probablemente ser cambiar el título de la página de alertar al usuario de la pestaña necesita atención (tal vez también el favicon - buscar la forma de meebo lo hace, es muy molesto, pero eficaz)

+0

Twitter hace algo similar en el sentido de que agrega un conteo si hay nuevos mensajes para leer, así que estoy de acuerdo que es probablemente la mejor manera ir. –

7

Es posible volver a enfocar la Pestaña A mediante una alerta en la Pestaña A, por ejemplo alerta ('Nuevo mensaje')

Sin embargo, debe tener cuidado al usar esto, ya que es muy probable que moleste a la gente. Solo debe usarlo si lo hace opcional en su aplicación. De lo contrario, actualizar el título de la Pestaña A y/o el favicon parece ser el mejor, como dice nc3b.

+0

El uso de 'alerta' hace que se detengan todos los js en esta página. No es un buen ideal – ntlam

3

Al usar Javascript, activar una alerta puede tener el efecto deseado. Ejecute este código en su consola, o agréguelo a su archivo html en una sola pestaña y cambie a otra pestaña en el mismo navegador.

setTimeout(function(){ 
    alert("Switched tabs"); 
}, 
5000); 

La alerta que aparece después de que el tiempo de espera se activará el interruptor pestaña. ¡O puedes hacer algo similar! Sin embargo, por razones de UX, aún puedes usar un ping o agregar e indicar un indicador como en el contador de mensajes de Facebook en el título de la página ((1) Facebook). También puedes experimentar con Notifications API (experimental).

+1

Vale la pena señalar que la alerta se activará dentro de 'ventana.abridor', no la 'ventana' en realidad. –

3

esto funcionó para mí en el formulario submit para volver a abrir la ventana de destino .. por lo que llamará a window.open en el mismo destino (o nuevo si se cambia) y luego continuará enviando el formulario.

 var open_target = function (form){ 
 
      var windowName = jQuery(form).attr('target'); 
 
      window.open("", windowName); 
 
      return true; 
 
     };
<form target="_search_elastic" onsubmit="return open_target(this);"> 
 
     </form>

2

Chrome y Firefox ahora tiene notificaciones. Creo que las notificaciones son probablemente una forma más amigable para el usuario de alertar al usuario de que algo ha cambiado en su aplicación que mostrar una alerta y forzar su página.

Cuestiones relacionadas