Сделать окно браузера мигающим в панели задач - PullRequest
101 голосов
/ 01 сентября 2008

Как заставить браузер пользователя мигать / мигать / выделяться на панели задач с помощью JavaScript? Например, если я делаю AJAX-запрос каждые 10 секунд, чтобы проверить, есть ли у пользователя какие-либо новые сообщения на сервере, я хочу, чтобы пользователь знал об этом сразу, даже если он в это время использует другое приложение.

Редактировать: Эти пользователи хотят отвлекаться при получении нового сообщения.

Ответы [ 11 ]

84 голосов
/ 01 октября 2008

это не заставит кнопку панели задач мигать изменяющимися цветами, но заголовок будет мигать, пока не начнёт двигаться мышь. Это должно работать кроссплатформенно, и даже если они просто есть в другой вкладке.

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

Обновление : Вы можете посмотреть, используя HTML5-уведомления .

54 голосов
/ 08 октября 2010

Я создал плагин jQuery с целью мигания уведомлений в строке заголовка браузера. Вы можете указать различные параметры, такие как интервал мигания, продолжительность, если мигание должно прекратиться, когда окно / вкладка сфокусировано и т. Д. Плагин работает в Firefox, Chrome, Safari, IE6, IE7 и IE8.

Вот пример того, как его использовать:

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

Если вы не используете jQuery, вы все равно можете захотеть взглянуть на исходный код (есть несколько причудливых ошибок и крайних случаев, с которыми вам нужно обойтись при мигании заголовка, если хотите для полной поддержки всех основных браузеров).

6 голосов
/ 01 октября 2008

Предположительно, вы можете сделать это в Windows с рычагом для Windows API JavaScript:

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

Ваши пользователи должны будут установить рычание.

В конце концов это будет частью Google Gears, в форме NotificationAPI:

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

Поэтому я бы порекомендовал использовать подход рычания на данный момент, возвращаясь к обновлениям заголовков окон, если это возможно, и уже пытаясь использовать API уведомлений Gears, когда он в конечном итоге станет доступен.

4 голосов
/ 01 октября 2008

Мой ответ "пользовательский интерфейс": Вы уверены, что ваши пользователи хотят, чтобы их браузеры мигали, или вы думаете, , что они хотят? Если бы я пользовался вашим программным обеспечением, я бы был недоволен, если бы эти предупреждения возникали очень часто и мешали мне.

Если вы уверены, что хотите сделать это таким образом, используйте окно предупреждения javascript. Это то, что Google Calendar делает для напоминаний о событиях, и они, вероятно, думают об этом.

Веб-страница действительно не лучшая среда для оповещений, которые необходимо знать. Если вы разрабатываете что-то вроде "ZOMG, серверы не работают!" оповещения, автоматическая электронная почта или SMS-сообщения нужным людям могут помочь.

3 голосов
/ 24 июля 2015
                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 голосов
/ 01 сентября 2008

Почему бы не воспользоваться подходом, который использует GMail, и показать количество сообщений в заголовке страницы?

Иногда пользователи не хотят отвлекаться, когда приходит новое сообщение.

3 голосов
/ 01 сентября 2008

Единственный способ, которым я могу думать об этом, это сделать что-то вроде оповещения («у вас есть новое сообщение»), когда сообщение получено. Если панель свернута, то будет мигать панель задач, но также откроется диалоговое окно, которое вам может не понадобиться.

2 голосов
/ 01 октября 2008

Возможно, вы захотите попробовать window.focus () - но это может раздражать, если экран переключается вокруг

1 голос
/ 02 октября 2008

AFAIK, нет хорошего способа сделать это последовательно. Я писал веб-клиент только для IE. В итоге мы использовали window.focus (), который работает большую часть времени. Иногда это фактически приводит к тому, что окно крадет фокус у приложения переднего плана, что может быть очень раздражающим.

1 голос
/ 01 сентября 2008

Вы можете изменить заголовок веб-страницы с каждым новым сообщением, чтобы предупредить пользователя. Я сделал это для клиента чата браузера, и большинство пользователей думали, что это работает достаточно хорошо.

document.title = "[user] hello world";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...