Pull to refresh

Comments 49

А еще благодоря этой библиотеке можно делать нехорошие вещи, например, пока пользователь не видит, перезагрузить содержимое таба, чтобы страница выглядила как PayPal. Пользуйтесь NoScript…
майнер бит-бабок запустить, например… Ещё идеи? :-)
UFO just landed and posted this here
Слишком малый выхлоп, пробовали на час запускать на сайте с 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.
Не знаю было ли так задумано или нет или может это не входит в возможности 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) — нет ли там сообщения об ошибке.
Не, нету ничего.
Да ладно, пусть пока обкатают нормально, потом буду использовать.
Sign up to leave a comment.