Hacer que la ventana del navegador parpadee en la barra de tareas


104

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

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


7
raro, yahoo mail lo hace, me pregunto cómo
Ayyash

Respuestas:


86

esto no hará que el botón de la barra de tareas parpadee en colores cambiantes, pero el título parpadeará hasta que muevan el mouse. Esto debería funcionar en varias plataformas, 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 ver el uso de notificaciones HTML5 .


1
No pude hacer que esto funcionara como se describe en IE 8. Seguía 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 onfocus. Entonces, cuando se carga la página, registro las funciones onfocus y onblur que alternan una variable booleana "enfocada". Tengo otro booleano para rastrear cuando el parpadeo ha comenzado. En el enfoque, si el parpadeo ha comenzado, lo detengo.
Peter M

4
Esto no parece funcionar en Chrome ... No creo que Chrome entienda que la cadena vacía es algo. Si utilizo un guión como mensaje "en blanco", funciona bien.
John Bubriski

1
esto parece acumularse si la alerta se activa varias veces. esto da como resultado que el intervalo se vuelva cada vez más rápido, luego, cuando lo elimina, solo elimina un único intervalo.
Caballo

2
En Windows 7, cambiar el título no parpadea / parpadea en la barra de tareas
Chand

1
¿Cómo le pasa argumentos (el mensaje) a esto?
shinzou

54

Creé un complemento de jQuery con el propósito de hacer parpadear los mensajes de notificación en la barra de título del navegador. Puede especificar diferentes opciones como el intervalo de parpadeo, la 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í hay un ejemplo de cómo usarlo:

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

Si no está utilizando jQuery, es posible que desee ver el código fuente (hay algunos errores extravagantes y casos extremos que debe solucionar al hacer parpadear el título si desea admitir completamente todos los navegadores principales).


6

Mi respuesta de "interfaz de usuario" es: ¿Está seguro de que sus usuarios quieren que sus navegadores parpadeen o cree que eso es lo que quieren? Si yo fuera el que usa su software, sé que me molestaría si estas alertas sucedieran con mucha frecuencia y se interpusieran en mi camino.

Si está seguro de que desea hacerlo de esta manera, use un cuadro de alerta de JavaScript. Eso es lo que hace Google Calendar para los recordatorios de eventos, y probablemente lo pensaron un poco.

Una página web realmente no es el mejor medio para las alertas de necesidad de saber. Si está diseñando algo parecido a "ZOMG, los servidores no funcionan". las alertas, los correos electrónicos automatizados o los mensajes SMS a las personas adecuadas pueden ser suficientes.


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

2
@secretformula ¿es realmente necesario desenterrar publicaciones de hace 5 años y marcarlas como de baja calidad?
Taifun

2
@Taifun apareció en la cola de VLQF, así que sí. Meta también ha discutido esto
fórmula secreta

@secretformula, esto realmente proporciona una muy buena respuesta a la pregunta: use un JavaScript alert.
Sam

mal o no, esto no me parece una respuesta, pero la historia muestra que 2 moderadores ya rechazaron la bandera de la NAA, así que sigo el consenso aquí.
Jean-François Fabre

6

Supuestamente puede hacer esto en Windows con el gruñido para la API de JavaScript de Windows:

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

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

Eventualmente, esto será parte de Google Gear, en forma de NotificationAPI:

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

Por lo tanto, recomendaría usar el enfoque de gruñido por ahora, recurrir a las actualizaciones del título de la ventana si es posible y ya diseñar los intentos de usar la API de notificación de Gears, para cuando finalmente esté disponible.


5
                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 

3

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


1
Inconsistente en los navegadores actuales: cada uno se comporta de manera diferente y ninguno hace que el ícono de la barra de tareas parpadee (probado Win8 - IE10, Chrome, Firefox)
danwellman

3

¿Por qué no adoptar el enfoque que utiliza GMail y mostrar la cantidad de mensajes en el título de la página?

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


2

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


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 chat del navegador y la mayoría de los usuarios pensaron que funcionaba lo suficientemente bien.

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

1

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


0

Estos usuarios quieren distraerse cuando llega un nuevo mensaje.

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

Es posible que desee investigar la escritura de una pequeña aplicación de Windows en .net que agrega un icono de notificación y luego puede crear ventanas emergentes elegantes o ventanas emergentes de globo o lo que sea, cuando reciben nuevos mensajes.

Esto no es demasiado difícil y estoy seguro de que si le preguntas a SO 'cómo muestro un icono de bandeja' y 'cómo hago las notificaciones emergentes' obtendrás excelentes respuestas :-)

Para el registro, estoy bastante seguro de que (aparte de usar un cuadro de diálogo de alerta / aviso) no puede actualizar 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 usar algunos controles Activex de Windows específicos de IE, pero luego aplica IE a sus usuarios pobres. No hagas eso :-(


0
function blinkTab() {
        const browserTitle = document.title;
        let timeoutId;
        let message = 'My New Title';

        const stopBlinking = () => {
            document.title = browserTitle;
            clearInterval(timeoutId);
        };

        const startBlinking = () => {
            document.title = document.title  === message ? browserTitle : message;
        };

        function registerEvents() {
            window.addEventListener("focus", function(event) { 
                stopBlinking();
            });

            window.addEventListener("blur", function(event) {
                const timeoutId = setInterval(startBlinking, 500);
            });
        };

        registerEvents();
    };


    blinkTab();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.