Обновить

Комментарии 49

А еще благодоря этой библиотеке можно делать нехорошие вещи, например, пока пользователь не видит, перезагрузить содержимое таба, чтобы страница выглядила как PayPal. Пользуйтесь NoScript…
майнер бит-бабок запустить, например… Ещё идеи? :-)
НЛО прилетело и опубликовало эту надпись здесь
Слишком малый выхлоп, пробовали на час запускать на сайте с 2к уников в день. Потом пробовали ява майнер — тоже бесполезно.
Что мешает сразу рендерить фишинговую страницу? Что-то юзкейса не понял…
ну как это… допустим ты читал новости на сайте N, и отправлял бабло в PayPal'e, затем тебе пришло письмо, пока ты его читал — страничка на сайте N подменилась, подменилась и иконка, и ты, ничего не подозревая возвращаешься в «псевдо» PayPal и как ни в чем ни бывало пытаешься снова залогиниться, ан-нет, не получится, ведь это ненастоящий PayPal :) примерно это имел ввиду Scorpil в своем сообщении выше.
Сертификат тоже «подменился»? :-) Хотя да, если с этой точки зрения рассматривать, то атака возможна… очень специфическая и сомнительная.
ну о каком еще сертификате может идти речь, если вы 2 минуты назад были на пайпале, и почитав письмо, вернулись на него. Какой еще сертификат, что же вы смешите?) да вы на строку браузера наврядли взглянете то, не говоря уже о составе страницы, и текущем протоколе (http/https).
Вы не вернётесь — вы читали в другом табе же. Вам нужно вручную переключиться на другой таб. Тем более надо очень точно подгадать момент.
самый момент — когда табов много. Если вы не знакомы с таким — то вам меня наверное не понять :)
… И это уже будет именно психологический фактор, т.к. фактически вы и не были знакомы ранее с такими способами обмана, и не подозревали о таком. Ответьте мне на вопрос пожалуйста, смОтрите ли вы на строку браузера, выбирая в списке табов лишь нужный таб по иконке/заголовку и далее после клика — по содержимому страницы?
небольшое уточнение: "… смОтрите ли вы на адресную строку браузера..."
Учитывая то, что строка находится сразу под табами — на нее тяжело не взглянуть, а уж тем более не заметить то, что url разительно отличается от paypal.com. Плюс сертификат — не проверить есть ssl или нет перед транзакцией это просто тупо. Хотя наверняка есть люди которые этого не делают, не спорю :-)
Кстати, как к этому относятся концепт-дизайнеры Chrome и FF? Ведь, они вообще собираются убрать адресную строку из браузера.
Строка будет появлятся при наведении на табы и при их смене.
Единственное нарушение безопасности, которое сейчас выглядит адекватным — это сбор большей статистики, о том, как вы пользуетесь сайтом. Плюс, иногда можно понять, что это один и тот же пользователь просматривает два сайта — если он будете переключать из одного сайта в другой (но есть более простые способы это узнать) — в общем проблем с безопасностью я тут пока не вижу.
«Единственное нарушение безопасности, которое сейчас выглядит адекватным — это сбор большей статистики, о том, как вы пользуетесь сайтом»

То что многие веб-разработчики и сами иногда не прочь поставить всякие лайвинторнеты, яндекс-метриксы, и прочие счетчики на свой сайт, это ничего, а то что какой-то сайт тупо собирает вашу активность/неактивность в данный момент времени — это угроза безопасности?
Не согласен с вами. Тот же лайвинтернет соберет о Вас гораздо больше инфы, чем статистика активности/неактивности, так что не вижу повода беспокиться.
Новопассит поможет тоже!
Visibility.onVisible имеет тот же порядок аргументов что и setInterval (функция, интервал), а Visibility.every — прямо противоположный.

Злые вы, марсиане.
У Visibility.onVisible только один аргумент — callback. В примере я вызываю обычный setTimeout.
У Visibility.every порядок аргументов такой же, как у jQuery.Chrono — потому что это очень удобный и человечный синтаксический сахар :). Объявим бой C-трешу из JS! ^_^
Удобная вещь, можно четко определить читает ли твой контент пользователь или нет.
В такой задачи, кстати, лучше следить за перемещениями курсора мышки и скролла :). А Page Visibility API может сказать, например, слушаюи ли вашу музыку в фоне или держать окно открытым.
для того, чтобы анимации не жраил процессор нужно пользоваться requestAnimationFrame, но для других вещей — это очень крутой API, спасибо :-)
Верно :). Хотя иногда анимация не бесконечное циклична, а её нужно запускать, например, раз в 1 с (как обратный отсчёт или слайдшоу) — тут requestAnimationFrame не так идеальный — лучше объединить с Page Visibility API.
Прощай, заработок с popUnder'ов!
Не знаю было ли так задумано или нет или может это не входит в возможности API, но при переключении на другое окно (нажал на уведомление из thunderbird во время просмотра видео) оно не понимает, что я больше не вижу этот таб
Да, я написал, что Chrome пока следит только за переключениями табов. В стандарте же указано, что hidden — это и сворачивание окна браузера или же блокировка экрана ОС.
А, извините — не заметил.
Теперь всякие летитбиты и депозиты будут следить за тем, смотришь ли ты на страницу, и если нет, то останавливать счетчик…
Не просто будут. Уже следят! Я сегодня наткнулся на такой файлопомойный сайт. Пока понял это — минут 10 прошло. Я ввожу капчу, запускается счетчик, я сваливаю. Через минуту захожу — никаких ссылок на скачку нет. Думаю, черт, глюк, ввожу капчу снова. Снова сваливаю. Фэйл повторяется. Потом я стал переключаться туда-сюда и заметил, что счетчик-то не бежит, когда я в другой закладке. Пришлось сидеть, ждать. Вот ведь грустно-то как :)
Да, это ужасная тёмная сторона этой технологии. В слабой попытке защититься хочу сказать, что есть хаки, определяющие что вы в другой табе и без Page Visibility API. Например хак MozVisibility использует то, что браузеры в фоновых табах запускают steInterval не чаще раза в секунду.
Это неправильное API (впрочем, в HTML/CSS/JS столько недочетов и недоработок, что это уже мелочи). По идее, при сворачивании окна/переключении с таба браузер должен по умолчанию полностью его останавливать, чтобы не расходовать ресурсы. Если какому-то табу нужно быть активным и в фоне, он должен использовать какие-нибудь специальные функции для этого, чтобы попроить браузер не отключать его.

А такой подход — отключать анимацию и вычисления при уходе с таба по событию — работать не будет, так как 95% разработчиков просто не будут с этим заморачиваться.

И, кстати, подобные штуки давно уже используются (вроде бы) в Гуглокартах и вконтакте — они определяют активность пользователя по событиям мыши и клавиатуры и как-то на ее отсутствие реагируют.
Ваш метод слишком жесток — достаточно просто сильно ограничивать фоновые табы. Например, все нормальные браузеры сейчас запускаю setInterval-код минимум раз в секунду.
Впрочем, Page Visibility API — это не только об ограничении ресурсов. Это в первую очередь об юзабилити (вот бы YouTube начал его поддерживать и не включал бы видео, если оно открывается сразу в фоновом табе).

<html>
	<head>
		<title>тайтл</title>
		<script>
			window.onblur = function () {document.title='документ неактивен'}
			window.onfocus = function () {document.title='документ снова активен'}
		</script>
	</head>
	<body>
		<img src="http://www.google.com.ua/images/nav_logo83.png">
	</body>
</html>


http://ssms-ka.narod2.ru/index_onblur.html
Прекрасный хак!
А он будет работать, если в body будет форма и сложное оформление?
Да, отлично работает. Но логика его работы всё равно отличается от Page Visibility API :(.
Хотя он становится неактивным, даже если окно браузера просто теряет фокус, хотя сайт всё ещё видим пользователю.
причем способ стар как мир и успешно применяется.
Метод определения открытого таба или видимого участка страницы существовал давно, ещё при IE5-6 и для всех браузеров. Но решение было некрасивое — нагружать периодически браузер анимацией на 100% загрузки процессора и сравнивать время. За пределами окна и при закрытом табе время было больше для той же анимации. И если 2 таба решат действовать таким способом, показания будут влиять друг на друга. Из-за некрасивости метода никогда не было желания довести его до конца, до некоторой утилиты. Но счётчикам на странице некрасивость — не помеха; странно, что они только сейчас начинают внедрять детектирование открытого таба.
Так примерно MozVisibility и работает — только он строится на довольно сильном снижении периода запусков setInterval.
ради высшей справедливости, реализовать симулятор кота Шрёдингера в браузере нельзя, ведь сам опыт показывает парадокс неопределенности состояния элементарной частицы. только имитатор. (вот если бы подключить к компьютеру какой-нибудь USB-счетчик Гейгера то будет совсем другое дело!)

а симулятор подбрасывания монетки — можно.
Например, можно проверять новые сообщения каждую минуту, когда пользователь открыл сайт (то есть ему это важно). А когда пользователь не видит сайт (читает другую страницу) будем экономить его трафик и проверять почту каждые 5 минут:
Я могу уйти со страницы (вкладки), при этом для меня важность получения сообщения или почты не уменьшится.
У меня в хроме не работает test/integration.html: выдаёт hidden, и потом уже не меняет, куда бы я ни сворачивал/тыкал/переключал.
Пробовал сам написать на голом API — тоже ничего не работает.
Видимо сломали.
Возвращаюсь к window.focus и window.blur.
Добрый день. Я прямо сейчас проверим в свежей бете Хрома (23.0.1271.26) — всё работает.

Если бы Page Visibility API был бы отключён, то страница выдавала бы «visible», а не «hidden» (по-умолчанию страница видима), так что я думаю, что API работает, просто посредине процесса происходит какая-то ошибка.

Вы можете посмотреть лог (Ctrl + Shift + J) — нет ли там сообщения об ошибке.
Не, нету ничего.
Да ладно, пусть пока обкатают нормально, потом буду использовать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
evilmartians.ru
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия