2008-08-31 26 views
97

¿Cómo hago que el navegador del usuario parpadee/parpadee/resalte en la barra de tareas con JavaScript? Por ejemplo, si realizo una solicitud de AJAX cada 10 segundos para ver si el usuario tiene nuevos mensajes en el servidor, quiero que el usuario lo sepa de inmediato, incluso si está usando otra aplicación en ese momento.Hacer que la ventana del navegador parpadee en la barra de tareas

Editar: Estos usuarios quieren distraerse cuando llega un nuevo mensaje.

+6

raro, correo de yahoo lo hace, me pregunto cómo Tho – Ayyash

Respuesta

79

esto no hará que el flash botón de la barra de tareas en el cambio de colores, pero el título se encenderá y apagará hasta que muevan el mouse.Esto debería funcionar multiplataforma, e incluso si solo lo tienen en una pestaña diferente.

newExcitingAlerts = (function() { 
    var oldTitle = document.title; 
    var msg = "New!"; 
    var timeoutId; 
    var blink = function() { document.title = document.title == msg ? ' ' : msg; }; 
    var clear = function() { 
     clearInterval(timeoutId); 
     document.title = oldTitle; 
     window.onmousemove = null; 
     timeoutId = null; 
    }; 
    return function() { 
     if (!timeoutId) { 
      timeoutId = setInterval(blink, 1000); 
      window.onmousemove = clear; 
     } 
    }; 
}()); 

Actualización: Es posible que desee buscar en el uso HTML5 notifications.

+1

No pude hacer que funcione como se describe en IE 8. Se mantuvo parpadeando el título para siempre. En lugar de usar onmousemove, tuve que usar onfocus y onblur para realizar un seguimiento de cuándo la ventana estaba enfocada o no y detener el parpadeo en la función de enfoque. Así que cuando se carga la página, registro onfocus y onblur funciones que alternan una variable booleana "enfocada". Tengo otro booleano para seguir cuando el parpadeo ha comenzado. En el enfoque, si el parpadeo ha comenzado, lo detengo. –

+0

window.onmousemove no funcionará en IE, sin embargo document.onmousemove funciona.Usar onblur y onfocus funciona bastante bien también, pero hay un error extraño en Chrome al establecer document.title en un controlador de eventos de Onfocus. Vea la publicación de mi blog sobre esto si lo desea: http://heyman.info/2010/oct/7/google-chrome-bug-when-setting-document-title/ – heyman

+4

Esto no parece funcionar en Chrome. . No creo que Chrome entienda que la cadena vacía es cualquier cosa. Si uso un guion como el mensaje "en blanco", funciona bien. –

3

La única forma en que puedo pensar en hacer esto es haciendo algo como alerta ('tienes un nuevo mensaje') cuando se recibe el mensaje. Esto destellará la barra de tareas si la ventana está minimizada, pero también abrirá un cuadro de diálogo, que puede que no desee.

+1

incoherente en los navegadores actuales - cada uno se comporta de manera diferente y no hacen el flash icono de la barra de tareas (probado Win8 - IE10, Chrome, Firefox) – danwellman

3

¿Por qué no utilizar el enfoque que utiliza GMail y mostrar el número de mensajes en el título de la página?

A veces los usuarios no quieren distraerse cuando llega un nuevo mensaje.

0

Estos usuarios quieren distraerse cuando llega un nuevo mensaje.

Parece que está escribiendo una aplicación para un proyecto interno de la empresa.

Es posible que desee investigar escribiendo una pequeña aplicación de Windows en .NET que agrega un ícono de notificación y luego puede hacer ventanas emergentes extravagantes o globos emergentes o lo que sea, cuando reciben mensajes nuevos.

Esto no es excesivamente duro y estoy seguro de si le preguntas SO '¿Cómo puedo mostrar un icono de la bandeja' y '¿cómo lo hago pop-up notificaciones' obtendrá algunos grandes respuestas :-)

Para el registro, estoy bastante seguro de que (aparte de usar un cuadro de diálogo de alerta/mensaje) no puede mostrar la barra de tareas en JS, ya que esto es muy específico de Windows, y JS realmente no funciona así. Es posible que pueda utilizar algunos controles activos de windows específicos de IE, pero luego inflige IE a sus usuarios pobres. No hagas eso :-(

1

podría cambiar el título de la página web con cada nuevo mensaje para alertar al usuario. Hice esto para un cliente de navegador de chat y la mayoría de los usuarios pensé que funcionó bastante bien.

document.title = "[user] hello world"; 
4

Mi respuesta "interfaz de usuario" es: ¿está seguro sus usuarios quieren que sus navegadores intermitente, o hacer usted piensa eso es lo que quieren Si yo fuera el uno con el software, sé que estaría? molesto si estas alertas sucedieron muy a menudo y se interpusieron en mi camino.

I Si está seguro de querer hacerlo de esta manera, use un cuadro de alerta de javascript. Eso es lo que Google Calendar hace para los recordatorios de eventos, y es probable que piensen un poco en ello.

Una página web realmente no es el mejor medio para las alertas de necesidad de conocer. Si está diseñando algo como "ZOMG, los servidores están caídos". alertas, correos electrónicos automatizados o mensajes SMS a las personas adecuadas podrían hacer el truco.

+9

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – secretformula

+0

@secretformula ¿Es realmente necesario desenterrar mensajes de hace 5 años y marcarlos como de baja calidad? – Taifun

+2

@Taifun apareció en la cola VLQF, así que sí. Meta también ha discutido esto – secretformula

2

Es posible que desee probar window.focus() - pero puede ser molesto si la pantalla cambia en torno

+1

No funciona cuando tenemos pestañas – Shashwat

6

Supuestamente se puede hacer esto en Windows con el gruñido de ventanas Javascript API:

http://ajaxian.com/archives/growls-for-windows-and-a-web-notification-api

sus usuarios tendrán que instalar gruñido sin embargo.

Con el tiempo esto va a ser parte de Google Gears, en la forma de la NotificationAPI:

http://code.google.com/p/gears/wiki/NotificationAPI

por lo que recomiendo usar el enfoque gruñido por ahora, cayendo de nuevo a las actualizaciones de título de la ventana si es posible , y ya ingeniería en los intentos de utilizar la API de notificaciones Gears, para cuando finalmente esté disponible.

1

AFAIK, no hay una buena manera de hacerlo con consistencia. Estaba escribiendo un único cliente de mensajería instantánea basado en web. Terminamos usando window.focus(), que funciona la mayor parte del tiempo. A veces hará que la ventana se robe el foco de la aplicación de primer plano, lo que puede ser realmente molesto.

53

He hecho un jQuery plugin con el propósito de parpadear mensajes de notificación en la barra de título del navegador. Puede especificar diferentes opciones como intervalo intermitente, duración, si el parpadeo debe detenerse cuando la ventana/pestaña se enfoca, etc. El complemento funciona en Firefox, Chrome, Safari, IE6, IE7 e IE8.

Aquí es un ejemplo de cómo se usa:

$.titleAlert("New mail!", { 
    requireBlur:true, 
    stopOnFocus:true, 
    interval:600 
}); 

Si usted no está usando jQuery, es posible que aún desee ver en la source code (hay algunos errores extravagantes y casos extremos que se necesita evitar el parpadeo del título si desea soportar completamente todos los navegadores principales).

+4

¡Buen trabajo! Es increíble lo fácil que es usar esto –

2
   var oldTitle = document.title; 
       var msg = "New Popup!"; 
       var timeoutId = false; 

       var blink = function() { 
        document.title = document.title == msg ? oldTitle : msg;//Modify Title in case a popup 

        if(document.hasFocus())//Stop blinking and restore the Application Title 
        { 
         document.title = oldTitle; 
         clearInterval(timeoutId); 
        }      
       }; 

       if (!timeoutId) { 
        timeoutId = setInterval(blink, 500);//Initiate the Blink Call 
       };//Blink logic 
Cuestiones relacionadas