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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Единственный способ, которым я могу это сделать, - это сделать что-то вроде предупреждения («у вас есть новое сообщение»), когда сообщение получено. Панель задач будет мигать, если окно свернуто, но также откроется диалоговое окно, которое может вам не понадобиться.
Несоответствие между текущими браузерами - каждый ведет себя по-разному, и ни один из них не заставляет значок панели задач мигать (проверено Win8 - IE10, Chrome, Firefox)
Почему бы не воспользоваться подходом, который использует GMail, и не показывать количество сообщений в заголовке страницы?
Иногда пользователи не хотят отвлекаться, когда приходит новое сообщение.
These users do want to be distracted when a new message arrives.
Похоже, вы пишете приложение для внутреннего проекта компании.
Возможно, вы захотите написать небольшое приложение для Windows в .net, которое добавляет значок уведомления, а затем может создавать причудливые всплывающие окна, всплывающие окна или что-то еще, когда они получают новые сообщения.
Это не слишком сложно, и я уверен, что если вы спросите ТАК: «Как мне показать значок в трее?» И «Как мне сделать всплывающие уведомления», вы получите отличные ответы :-)
Для записи, я почти уверен, что (кроме использования диалогового окна с предупреждением / приглашением) вы не можете прошить панель задач в JS, поскольку это сильно зависит от Windows, а JS действительно так не работает. Возможно, вы сможете использовать некоторые элементы управления ActiveX Windows, специфичные для IE, но тогда вы навяжете IE своим бедным пользователям. Не делай этого :-(
вы можете изменять заголовок веб-страницы с каждым новым сообщением, чтобы предупредить пользователя. Я сделал это для клиента чата в браузере, и большинство пользователей сочли, что он работает достаточно хорошо.
document.title = "[user] hello world";
Мой ответ "пользовательского интерфейса": вы уверены, что ваши пользователи хочет, чтобы их браузеры мигали, или ты думаешь это то, что они хотят? Если бы я был тем, кто использовал ваше программное обеспечение, я был бы раздражен, если бы эти предупреждения появлялись очень часто и мешали мне.
Если вы уверены, что хотите сделать это таким образом, используйте окно предупреждения javascript. Это то, что Google Calendar делает для напоминаний о мероприятиях, и они, вероятно, над этим задумались.
Веб-страница действительно не лучшее средство для оповещений о необходимости. Если вы разрабатываете что-то вроде «ZOMG, серверы не работают!» оповещения, автоматические электронные письма или SMS-сообщения нужным людям могут помочь.
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.
@secretformula действительно ли нужно выкапывать посты 5-летней давности и отмечать их как некачественные?
@Taifun, он появился в очереди VLQF, так что да, это так. Мета тоже это обсуждала
@secretformula, это действительно дает очень хороший ответ на вопрос: используйте JavaScript alert.
неверно или нет, мне это не кажется ответом, но история показывает, что 2 модератора уже отклонили флаг NAA, поэтому я придерживаюсь здесь консенсуса.
Вы можете попробовать window.focus () - но это может раздражать, если экран переключается
это не заставит кнопку панели задач мигать изменяющимся цветом, но заголовок будет мигать, пока они не переместят мышь. Это должно работать на кросс-платформе, и даже если у них это просто на другой вкладке.
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.
Я не мог заставить это работать, как описано в IE 8. Заголовок постоянно мигал. Вместо использования onmousemove мне пришлось использовать onfocus и onblur, чтобы отслеживать, когда окно было в фокусе или нет, и останавливать мигание в функции onfocus. Поэтому, когда страница загружается, я регистрирую функции onfocus и onblur, которые переключают логическую «сфокусированную» переменную. У меня есть еще одно логическое значение, чтобы отслеживать, когда началось мигание. В onfocus, если моргание началось, прекращаю.
window.onmousemove не будет работать в IE, однако document.onmousemove работает. Использование onblur и onfocus тоже работает неплохо, но в Chrome есть странная ошибка при установке document.title в обработчике событий onfocus. См. Мое сообщение в блоге об этом, если хотите: heyman.info/2010/oct/7/…
Похоже, это не работает в Chrome ... Я не думаю, что Chrome понимает, что пустая строка - это что-то. Если я использую дефис в качестве «пустого» сообщения, все работает нормально.
это, кажется, складывается, если предупреждение запускается несколько раз. это приводит к тому, что интервал становится все быстрее и быстрее, а при удалении удаляется только один интервал.
В Windows 7 изменение названия не мигает / не мигает на панели задач
Спасибо за предупреждение об уведомлении HTML5. Однако ссылка кажется устаревшей; это не работает в последней версии Chrome. Однако Ссылка MDN работал.
Как передать этому аргументы (сообщение)?
В Windows 10 изменение заголовка не отображается из-за небольшой плитки на панели задач, а также не мигает / мигает. Любое решение для этого?
Предположительно вы можете сделать это в окнах с рычанием для Windows javascript API:
http://ajaxian.com/archives/growls-for-windows-and-a-web-notification-api
Тем не менее, вашим пользователям придется установить рычание.
В конечном итоге это станет частью механизма Google в виде NotificationAPI:
http://code.google.com/p/gears/wiki/NotificationAPI
Поэтому я бы порекомендовал пока использовать подход рычания, возвращаясь к обновлениям заголовков окон, если это возможно, и уже занимаясь разработкой попыток использовать API уведомлений Gears, когда он в конечном итоге станет доступным.
AFAIK, нет хорошего способа сделать это последовательно. Я писал веб-клиент для обмена мгновенными сообщениями только для IE. В итоге мы использовали window.focus (), который работает большую часть времени. Иногда это действительно приводит к тому, что окно крадет фокус у приложения переднего плана, что может сильно раздражать.
Я сделал плагин jQuery для мигания уведомлений в строке заголовка браузера. Вы можете указать различные параметры, такие как интервал мигания, продолжительность, должно ли мигание прекратиться, когда окно / вкладка сфокусируется и т. д. Плагин работает в Firefox, Chrome, Safari, IE6, IE7 и IE8.
Вот пример того, как его использовать:
$.titleAlert("New mail!", {
requireBlur:true,
stopOnFocus:true,
interval:600
});
Если вы не используете jQuery, вы все равно можете взглянуть на исходный код (есть несколько причудливых ошибок и крайних случаев, которые вам нужно исправить при мигании заголовка, если вы хотите полностью поддерживать все основные браузеры).
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
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();
"Заставить окно браузера мигать на панели задач"
via Javascript
это невозможно!!
странно, почта Yahoo делает это, интересно, как это