Faire clignoter la fenêtre du navigateur dans la barre des tâches

105

Comment faire clignoter / flasher / mettre en évidence le navigateur d'un utilisateur dans la barre des tâches à l'aide de JavaScript? Par exemple, si je fais une requête AJAX toutes les 10 secondes pour voir si l'utilisateur a de nouveaux messages sur le serveur, je veux que l'utilisateur le sache tout de suite, même s'il utilise une autre application à ce moment-là.

Modifier: ces utilisateurs veulent être distraits lorsqu'un nouveau message arrive.

erik
la source
7
bizarre, yahoo mail le fait, je me demande comment tho
Ayyash

Réponses:

86

cela ne fera pas clignoter le bouton de la barre des tâches avec des couleurs changeantes, mais le titre clignotera jusqu'à ce qu'ils déplacent la souris. Cela devrait fonctionner sur plusieurs plates-formes, et même s'ils l'ont juste dans un autre onglet.

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;
        }
    };
}());

Mise à jour : vous voudrez peut-être envisager d'utiliser les notifications HTML5 .

nickf
la source
1
Je ne pouvais pas faire fonctionner cela comme décrit dans IE 8. Il a continué à clignoter le titre pour toujours. Au lieu d'utiliser onmousemove, j'ai dû utiliser onfocus et onblur pour savoir quand la fenêtre était mise au point ou non et arrêter le clignotement dans la fonction onfocus. Ainsi, lorsque la page se charge, j'enregistre les fonctions onfocus et onblur qui basculent une variable booléenne "focalisée". J'ai un autre booléen à suivre lorsque le clignotement a commencé. Dans la mise au point, si le clignotement a commencé, je l'arrête.
Peter M
4
Cela ne semble pas fonctionner dans Chrome ... Je ne pense pas que Chrome comprend que la chaîne vide est quelque chose. Si j'utilise un trait d'union comme message «vide», cela fonctionne très bien.
John Bubriski
1
cela semble se cumuler si l'alerte est déclenchée plusieurs fois. cela se traduit par un intervalle de plus en plus rapide, puis lorsque vous supprimez, il ne supprime qu'un seul intervalle.
Cheval
2
Sous Windows 7, la modification du titre ne clignote pas / ne clignote pas dans la barre des tâches
Chand
1
Comment passez-vous des arguments (le message) à cela?
shinzou
54

J'ai créé un plugin jQuery dans le but de faire clignoter les messages de notification dans la barre de titre du navigateur. Vous pouvez spécifier différentes options comme l'intervalle de clignotement, la durée, si le clignotement doit s'arrêter lorsque la fenêtre / l'onglet se concentre, etc. Le plugin fonctionne dans Firefox, Chrome, Safari, IE6, IE7 et IE8.

Voici un exemple d'utilisation:

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

Si vous n'utilisez pas jQuery, vous voudrez peut-être toujours consulter le code source (il y a quelques bogues bizarres et cas extrêmes que vous devez contourner lorsque vous faites clignoter le titre si vous souhaitez prendre en charge pleinement tous les principaux navigateurs).

heyman
la source
6

Ma réponse "interface utilisateur" est la suivante: êtes-vous sûr que vos utilisateurs souhaitent que leur navigateur clignote ou pensez-vous que c'est ce qu'ils veulent? Si j'étais celui qui utilisait votre logiciel, je sais que je serais ennuyé si ces alertes se produisaient très souvent et me gênaient.

Si vous êtes sûr de vouloir le faire de cette façon, utilisez une boîte d'alerte javascript. C'est ce que fait Google Agenda pour les rappels d'événements, et ils y ont probablement réfléchi.

Une page Web n'est vraiment pas le meilleur moyen pour les alertes de nécessité de savoir. Si vous concevez quelque chose comme "ZOMG, les serveurs sont en panne!" des alertes, des e-mails automatisés ou des SMS aux bonnes personnes peuvent faire l'affaire.

Rudi
la source
11
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous sa publication.
secretformula
2
@secretformula est-il vraiment nécessaire de déterrer des messages vieux de 5 ans et de les signaler comme étant de mauvaise qualité?
Taifun
2
@Taifun, il est apparu dans la file d'attente VLQF, donc oui. Meta a également discuté de cela
secretformula
@secretformula, cela fournit en fait une très bonne réponse à la question: utilisez un JavaScript alert.
Sam
faux ou pas, cela ne me semble pas être une réponse, mais l'histoire montre que 2 modérateurs ont déjà décliné le drapeau NAA, donc je suis le consensus ici.
Jean-François Fabre
6

On suppose que vous pouvez le faire sur Windows avec l'API javascript Growl pour Windows:

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

Vos utilisateurs devront cependant installer growl.

Finalement, cela fera partie de Google Gears, sous la forme de NotificationAPI:

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

Je recommanderais donc d'utiliser l'approche du grognement pour le moment, de revenir aux mises à jour du titre de la fenêtre si possible, et de déjà concevoir des tentatives d'utilisation de l'API Gears Notification, pour le moment où elle sera finalement disponible.

Joeri Sebrechts
la source
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 
Rikki Goswami
la source
3

La seule façon dont je peux penser à faire cela est de faire quelque chose comme alert («vous avez un nouveau message») lorsque le message est reçu. Cela fera clignoter la barre des tâches si la fenêtre est réduite, mais cela ouvrira également une boîte de dialogue, ce que vous ne voudrez peut-être pas.

Robin Barnes
la source
1
Incohérent entre les navigateurs actuels - chacun se comporte différemment et aucun ne fait clignoter l'icône de la barre des tâches (testé Win8 - IE10, Chrome, Firefox)
danwellman
3

Pourquoi ne pas adopter l'approche utilisée par GMail et afficher le nombre de messages dans le titre de la page?

Parfois, les utilisateurs ne veulent pas être distraits lorsqu'un nouveau message arrive.

Andyuk
la source
2

Vous voudrez peut-être essayer window.focus () - mais cela peut être ennuyeux si l'écran change

Sugendran
la source
1

vous pouvez changer le titre de la page Web à chaque nouveau message pour alerter l'utilisateur. J'ai fait cela pour un client de chat de navigateur et la plupart des utilisateurs ont pensé que cela fonctionnait assez bien.

document.title = "[user] hello world";
Toran Billups
la source
1

AFAIK, il n'y a pas de bon moyen de le faire avec cohérence. J'écrivais un client de messagerie instantanée basé uniquement sur le Web pour IE. Nous avons fini par utiliser window.focus (), qui fonctionne la plupart du temps. Parfois, cela entraînera en fait la fenêtre de voler le focus de l'application au premier plan, ce qui peut être vraiment ennuyeux.

Chase Seibert
la source
0

Ces utilisateurs veulent être distraits lorsqu'un nouveau message arrive.

On dirait que vous écrivez une application pour un projet d'entreprise interne.

Vous voudrez peut-être enquêter sur l'écriture d'une petite application Windows dans .net qui ajoute une icône de notification et peut ensuite créer des fenêtres contextuelles sophistiquées ou des bulles contextuelles ou autre, quand ils reçoivent de nouveaux messages.

Ce n'est pas trop difficile et je suis sûr que si vous demandez `` comment afficher une icône de barre d'état '' et `` comment puis-je faire apparaître des notifications '', vous obtiendrez d'excellentes réponses :-)

Pour mémoire, je suis à peu près sûr que (à part l'utilisation d'une boîte de dialogue d'alerte / d'invite) vous ne pouvez pas faire clignoter la barre des tâches dans JS, car c'est fortement spécifique à Windows, et JS ne fonctionne vraiment pas comme ça. Vous pourrez peut-être utiliser certains contrôles ActiveX Windows spécifiques à IE, mais vous infligez alors IE à vos utilisateurs pauvres. Ne fais pas ça :-(

Orion Edwards
la source
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();
prashantsahni
la source