Змусити вікно браузера блимати в панелі завдань


104

Як змусити браузер користувача блимати / спалах / виділити на панелі завдань за допомогою JavaScript? Наприклад, якщо я роблю запит AJAX кожні 10 секунд, щоб побачити, чи є у користувача якісь нові повідомлення на сервері, я хочу, щоб користувач це дізнався відразу, навіть якщо він використовує інший додаток на той час.

Редагувати: ці користувачі хочуть відволікатися, коли надходить нове повідомлення.


7
дивно, Yahoo пошта це робить, мені цікаво, як тхо
Айяш

Відповіді:


86

це не призведе до того, що кнопка панелі завдань блимає зміною кольорів, але заголовок блиматиме та вимикатиметься, поки вони не перемістять мишу. Це має працювати на крос-платформах, і навіть якщо вони просто мають його на іншій вкладці.

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 .


1
Я не міг змусити це працювати так, як описано в IE 8. Це продовжувало блимати заголовок назавжди. Замість того, щоб використовувати onmousemove, мені довелося використовувати onfocus та onblur, щоб відслідковувати, коли вікно було у фокусі чи ні, і зупиняти миготіння функції onfocus. Отже, коли сторінка завантажується, я реєструю функції onfocus та onblur, які перемикають булеву "орієнтовану" змінну. У мене є ще один булевий шлях для відстеження, коли миготіння почалося. У фокусі, якщо моргання почалося, я зупиняю його.
Пітер М

4
Схоже, це не працює в Chrome ... Я не думаю, що Chrome розуміє, що порожня рядок - це щось. Якщо я використовую дефіс як "порожнє" повідомлення, воно працює чудово.
Іван Бубріскі

1
це, здається, є стеком, якщо попередження спрацьовує кілька разів. це призводить до того, що інтервал стає швидшим і швидшим, тоді, коли ви видаляєте, він видаляє лише один інтервал.
Кінь

2
У Windows 7 зміна заголовку не блимає / не миготить на панелі завдань
Чанд

1
Як ви передаєте до цього аргументи (повідомлення)?
shinzou

54

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

Ось приклад того, як його використовувати:

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

Якщо ви не використовуєте jQuery, можливо, ви все ще захочете переглянути вихідний код (є кілька химерних помилок та крайових випадків, над якими вам потрібно обійтись, коли миготіти заголовком, якщо ви хочете повністю підтримувати всі основні браузери).


6

Моя відповідь "користувальницький інтерфейс" така: Ви впевнені, що ваші користувачі хочуть, щоб їх веб-переглядачі блимали, чи ви вважаєте , що цього хочуть? Якби я був тим, хто використовував ваше програмне забезпечення, я знаю, що був би роздратований, якби ці сповіщення траплялися дуже часто і заважали мені.

Якщо ви впевнені, що хочете зробити це таким чином, використовуйте поле попередження javascript. Ось що робить Google Calendar для нагадувань про події, і вони, ймовірно, вкладають у нього певну думку.

Веб-сторінка насправді не найкращий засіб для сповіщення про необхідність. Якщо ви щось розробляєте за принципом "ZOMG, сервери вниз!" попередження, автоматизовані електронні листи або SMS-повідомлення потрібним людям можуть зробити цю справу.


11
Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх дописом.
секретна формула

2
@secretformula чи справді потрібно викопати 5-річні повідомлення та позначити їх як неякісні?
Тайфун

2
@Taifun він з’явився у черзі VLQF, так так, так. Мета також обговорювала це
секретну формулу

@secretformula, це насправді дає дуже гарну відповідь на питання: використовуйте JavaScript alert.
Сем

неправильно чи ні, це не виглядає як відповідь на мене, але історія показує, що 2 модератори вже відхилили прапор NAA, тому я дотримуюся тут консенсусу.
Жан-Франсуа Фабре

6

Імовірно, ви можете це зробити у Windows за допомогою API для JavaScript JavaScript:

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

Вашим користувачам доведеться встановити функцію зростання.

Врешті-решт, це стане частиною передач Google, у формі NotificationAPI:

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

Тому я рекомендував би зараз використовувати підхід, що повертається, повертаючись до оновлень заголовка вікна, якщо це можливо, і вже розробляючи спроби використовувати API Gears Notification, коли він з часом стане доступним.


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

Єдиний спосіб, коли я можу це зробити, - це зробити щось на кшталт попередження ("у вас нове повідомлення"), коли повідомлення надійде. Це спалахне панель завдань, якщо вікно буде мінімізоване, але воно також відкриє діалогове вікно, яке ви, можливо, не захочете.


1
Невідповідність поточним браузерам - кожен веде себе по-різному, і жоден не змушує піктограму панелі завдань спалахувати (тестується Win8 - IE10, Chrome, Firefox)
danwellman

3

Чому б не скористатися підходом, який використовує GMail і не показати кількість повідомлень у заголовку сторінки?

Іноді користувачі не хочуть відволікатися, коли надходить нове повідомлення.


2

Ви можете спробувати window.focus () - але це може дратувати, якщо екран перемикається


1

ви можете змінити заголовок веб-сторінки з кожним новим повідомленням, щоб попередити користувача. Я зробив це для клієнта чату браузера, і більшість користувачів вважають, що це працює досить добре.

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

1

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


0

Ці користувачі хочуть відволікатися, коли надходить нове повідомлення.

Здається, ви пишете додаток для внутрішнього проекту компанії.

Ви можете розглянути можливість написання невеликого додатка для Windows у .net, який додає піктограму сповіщення, а потім зможе робити вигадливі спливаючі вікна або спливаючі кулі чи що завгодно, коли вони отримуватимуть нові повідомлення.

Це не надто складно, і я впевнений, що якщо ви запитаєте ТАК "як я показую піктограму лотка" і "як я спливаюче повідомлення", ви отримаєте чудові відповіді :-)

Для запису я майже впевнений, що (крім використання діалогового вікна оповіщення / підказки) ви не можете прошивати панель завдань у JS, оскільки це дуже специфічно для Windows, і JS насправді не працює так. Можливо, ви зможете використовувати деякі специфічні для IE елементи керування windows Activex, але тоді ви завдаєте IE вашим бідним користувачам. Не робіть цього :-(


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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.