Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как узнать свернуто окно браузера или нет. (https://javascript.ru/forum/events/1846-kak-uznat-svernuto-okno-brauzera-ili-net.html)

bar-boss 24.09.2008 12:49

Как узнать свернуто окно браузера или нет.
 
Здравствуйте.

Есть окно сообщений чата. Аяксом раз в 10 секунд посылается запрос на сервер, на котором мы узнаем, есть ли новые сообщения.
Если новые сообщения есть, тогда мы вставляем полученный от аякса ответ в div (innerHTML).
Если новых сообщений нету, то есть аякс возвращает определенное слово (например 'stop'), тогда мы ничего не делаем.

Теперь, нужно определить свернуто окно сообщений чата или нет.
1. Если окно сообщений свернуто (onblur)
- если есть новые сообщения (аякс возвращает не 'stop'), тогда мы динамически меняем document.title ('Новое сообщение!!!' на '********' и наоборот), то есть чтобы оно мигало
- если нет новых сообщений (аякс возвращает 'stop'), тогда мы ничего не делаем.
2. Если окно сообщений не свернуто (onfocus)
- тогда независимо есть ли новые сообщения или нет, тогда мы присваиваем document.title определенное значение (напр, название сайта).

Проблема вот в чем,
при первом открытии чата аякс нам возращает сообщения (то есть не стоп), мы сразу же окно сворачиваем и начинает мигать title,
потом окно разворачиваем, и title присваивается название сайта.
потом ждем очередного ответа от аякса (он нам возвращает 'stop') и затем окно сворачиваем, и в этот момент title опять начинает мигать, а нужно чтобы он не мигал.

вот примерный код

аяксовая функция
function Request_to_Server()
{
if(req.responseText != 'stop')
{
делаем innetHTML = req.responseText
и если окно скрыто то вызываем функцию, которая меняет document.title (может здесь какая-то проблема?)
window.onblur = function()
{
setFlashingTitle();
}
}
else
{
если стоп то ничего не делаем
}
setTimeout('Request_to_Server();',10000);
}

и когда окно разворачивается, отменяем мигание
window.onfocus = function()
{
setNormalTitle();
}

ZoNT 24.09.2008 17:13

blur - это не факт что оно свёрнуто. Просто фокус ушёл.

Да и окно - это системная лабуда. Так что никак.

bar-boss 25.09.2008 09:30

var is_focus = 1;
window.onfocus = function()
{
is_focus = 1;
}

window.onblur = function()
{
is_focus = 0;
}

а если так?

Андрей Параничев 25.09.2008 16:09

bar-boss,
Вы определяете в фокусе ли окно, а не свернуто ли. Потеря фокуса может случится при открытии другого окна, например. Далеко не только при сворачивании.


Часовой пояс GMT +3, время: 06:40.