как узнать на вкладке ли пользователь? *(РЕШЕНО!)
Доброго времени суток, такой вопрос:
Как узнать, находится ли пользователь на данной странице, вкладке. Менять код самой странице нельзя при том, только через JS . пробую так: window.onblur = function () { document.title='документ неактивен'; } window.onfocus = function () { document.title='документ снова активен'; } onblur работает отлично, а onfocus активизируется только в том случае, если кликнуть по сайту. Пожалуйста, помогите в проблемкой. Всем ответившим + |
У меня вот так работает:
// Проверка активна ли в настоящий момент вкладка браузера
var isActive = true;
function onBlur() { // окно теряет фокус
isActive = false;
// что-то делаем
}
function onFocus() {// окно получает фокус
isActive = true;
// что-то делаем
}
if (/*@cc_on!@*/false) { // для Internet Explorer
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else {
window.onfocus = onFocus;
window.onblur = onBlur;
}
|
И что? То же самое! Активируется только после клика
|
а некоторым сайтам и клика мало! Обязательно, чтобы с другой вкладки переключение было. А если напрямую перейти и лазить по сайту, то будет не активно!
Может как-то отследить движение мыши на поле сайта? (обязательно чтобы страницу сайта не меняя!) |
Цитата:
Цитата:
Код, который я привел, работает на реальном проекте уже более года. При получении вкладкой фокуса (без кликов по странице) скрипт отрабатывает своё дело (в моем случае - это чат - выключается звук сообщений и перемещается указатель последнего прочитанного сообщения) |
Есть же page visibility API, правда только в относительно новых браузерах.
|
Цитата:
Ветеран, толи я что-то не понимаю, но при открытии страницы запускается функция onBlur() и соответственно isActive = false; Далее я это использовать не могу |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Но теперь такая проблема: при открытии страницы в новой вкладке, время на ней начинает считаться. А этого быть не должно. Как отследить, что страница была открыта именно в новой вкладке и по факту её еще не открывали для просмотра? |
Но теперь такая проблема: при открытии страницы в новой вкладке, время на ней начинает считаться. А этого быть не должно. Как отследить, что страница была открыта именно в новой вкладке и по факту её еще не открывали для просмотра?
|
Цитата:
|
Вот весь код:
var isActive = true;
function onBlur() { // окно теряет фокус
isActive = false;
chrome.runtime.sendMessage({site:sait,time:localStorage[sait]});
localStorage[sait] = '0';
}
function onFocus() {// окно получает фокус
isActive = true;
}
window.onbeforeunload = onBlur;
window.onfocus = onFocus;
window.onblur = onBlur;
function sec() //выполняется каждую секунду
{
if (isActive)//если страница активна
{
localStorage[sait] = parseInt(localStorage[sait],10) +1;
}
}
var sait=location.hostname;
localStorage[sait] = '0';
setInterval(sec, 1000);// использовать функцию
|
Скрипт считает время, проведенное на сайте. По начальным условиям isActive = true; По этому и начинается сразу отсчет, даже если страница открыта в новой складке. Если по умолчанию сделать isActive = false; то время не будет считаться, ока не кликнешь на саму страницу, а это тоже не подходит
|
У упоротых, простите, упорных людей порой такое бывает - задача становится нерешаемой из-за придуманных проблем.
|
Я не понял, где придуманная проблема?
|
Цитата:
Цитата:
Цитата:
|
бля, реально. Просто открыл почитать про page visibility API и на хабре нашел, что нужно библиотеку подрубать. Сейчас покопал, ввел строчку
if(document.webkitVisibilityState == 'visible')//если страница активна
{
localStorage[sait] = parseInt(localStorage[sait],10) +1;
}
И все проблемы решились=) На видео тоже время стало считаться! Спасибо за помощь |
| Часовой пояс GMT +3, время: 11:09. |