Изменение названия окна при фокусировке окна в Chrome не работает

Я (ab), используя заголовок документа как своего рода область уведомлений. Если на вкладке/окне нет фокуса в момент, когда я хочу уведомить пользователя о чем-то, я изменяю заголовок окна, чтобы включить какое-то уведомление.

Когда окно/вкладка возвращается в фокус, я хочу удалить уведомление, т.е. reset название в стандарт. Однако этот сброс иногда не работает в Chrome.

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

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

Ответ 1

Это, как представляется, является ошибкой в ​​Chrome относительно фактической перерисовки заголовка вкладки, поскольку сам заголовок документа (т.е. внутри DOM) на самом деле правильно обновлен.

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

Вот почему я пробовал это обходное решение, которое действительно работает:

window.setTimeout(function () { $(document).attr("title", newtitle); }, 200);

– просто подождите короткое время, прежде чем обновлять заголовок, поэтому два события перерисовывания не конфликтуют друг с другом. Это не очень, очевидно, но 0,2-секундная задержка обычно не является проблемой.

Ответ 2

хотя tiftik сказал, что эта ошибка исправлена, она все еще случается в моем Chrome (версия 21).

Предлагаемое решение balpha также работает для меня - но не забудьте указать название документа на новый заголовок на Focus и подождите 200 мс, чтобы снова установить его - это не сработает! (возможно, потому, что Chrome считает, что это тот же заголовок, поэтому он не будет обновляться)

Подождите 200 мс и установите его - отлично работает!

Ответ 3

Для справок в будущем: эта ошибка исправлена.