https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 27/04/10 в 19:12 |
Возможно ли проверить скролилась ли при посещении страница или нет? Может кто-то видел что-нибудь подобное готовое.
|
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 27/04/10 в 19:34 |
Повеситься на onscroll.
|
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 27/04/10 в 19:43 |
Тупой пример на коленке на Prototype:
Код: |
<html>
<head>
<script type="text/javascript" src="http://prototypejs.org/assets/2010/4/1/prototype.js"></script>
<script type="text/javascript">
Event.observe(window, 'scroll', function(event) {
alert('You scrolled me!');
});
</script>
</head>
<body>
<p>scroll me</p>
<p>scroll me</p>
<p>scroll me</p>
...куча контента...
</body>
</html>
|
|
|
|
|
https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 27/04/10 в 23:25 |
remorhaz: Спасибо, то что нужно
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 28/04/10 в 01:07 |
можно на чистом javascript
Код: | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
//<![CDATA[
function WhileScroll() {
alert("i'm scrolled!");
/**
Здесь что то делаем...
*/
}
function MouseScroll(event) {
if (!event) event = window.event;
(event.wheelDelta || event.detail) && (WhileScroll());
}
function init() {
if (window.addEventListener) window.addEventListener('DOMMouseScroll', MouseScroll, false);
window.onmousewheel = document.onmousewheel = MouseScroll;
}
(function (){init();}());
//]]>
</script>
<title>Scroll Handler</title>
<style type="text/css">
/*<![CDATA[*/
div.c1 {width: 100%; height: 2000px;}
/*]]>*/
</style>
</head>
<body>
<div class="c1">
<span>Some content</span>
</div>
</body>
</html> |
|
|
|
|
https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 28/04/10 в 02:09 |
freeek: Спасибо и в репу А вот если такую проверку делать на сидже для каждого уника как будут обстоять дела с нагрузкой на сервер? не загнется?
|
|
|
|
С нами с 01.03.07
Сообщения: 304
Рейтинг: 223
|
Добавлено: 28/04/10 в 08:06 |
так это же на стороне юзера чекается , если вызываешь скрипт который просто пишет параметры то нормально должен отрабатывать
|
|
|
|
https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 28/04/10 в 20:03 |
leroy_17: Точно, натупил я немного. А как эти данные на сервер передать?
|
|
|
|
С нами с 16.02.07
Сообщения: 15
Рейтинг: 21
|
Добавлено: 28/04/10 в 20:46 |
San_Tehnik писал: | leroy_17: Точно, натупил я немного. А как эти данные на сервер передать? |
Можно с помощью AJAX, только не увлекаться, чтобы не слалось слишком много данных (не часто). Скорее всего, привязать отправку к событию onMouseUp.
Простая легковесная библиотека - xajax, очень удобно.
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 28/04/10 в 20:47 |
наверное через ajax
|
|
|
|
Мотиватор :)
С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607
|
Добавлено: 28/04/10 в 21:29 |
NetSpider писал: |
Можно с помощью AJAX, только не увлекаться, чтобы не слалось слишком много данных (не часто). Скорее всего, привязать отправку к событию onMouseUp.
|
так всё равно ж будет передавать кучу событий, а нам ведь нужно только одно? хотя, это тоже просто:
Код: |
<script type="text/javascript>
var scrolled=0;
function onScroll()
{
if (scrolled==0)
{
scrolled=1;
call_my_ajax_function();
}
}
</script>
|
NetSpider писал: |
Простая легковесная библиотека - xajax, очень удобно.
|
странные какие-то у тебя понятия о легковесности
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 28/04/10 в 21:44 |
jquery все ж лучше будет, имхо, да и стандартнее чуток
|
|
|
|
Мотиватор :)
С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607
|
Добавлено: 28/04/10 в 21:59 |
Вот тебе готовый работающий пример:
index.html (страница, которая посылает событие onscroll php-скрипту, 1 раз независимо от того сколько её таскали туда-сюда):
Код: |
<html>
<head>
<title>My page</title>
<script type="text/javascript" src="JsHttpRequest.js"></script>
</head>
<body onscroll="onScroll()">
<input type="hidden" id="scrolled" value="0" />
<script type="text/javascript">
function update_my_php_script()
{
var req = new JsHttpRequest();
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
document.getElementById('debug').innerHTML = req.responseText;
}
}
req.open('GET', 'my_php_script.php', true);
req.send( { 'url': window.location } );
}
function onScroll()
{
if (document.getElementById('scrolled').value=="0")
{
document.getElementById('scrolled').value="1";
update_my_php_script();
}
}
</script>
<div id="debug" style="padding:10px; border:1px dashed red; background-color:lightyellow"></div>
<!--
Здесь много-много контента, чтобы было, собственно, что скроллить =)
-->
</body>
</html>
|
а это собственно, my_php_script.php скрипт, который делает что-то, когда страницу скроллили, ему в $_GET[url] передаётся адрес страницы, которую скроллили:
Код: |
<?php
require_once "JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("utf-8");
$url = $_GET['url'];
echo "the page {$url} was scrolled!";
?>
|
для этой всей байды использовалась библиотека JsHTTPRequest Дмитрия Котерова (dklab, denwer), всего 2 файла общим объёмом 38кб (без компрессии, с компрессией меньше 20): http://www.dklab.ru/lib/JsHttpRequest/
почему именно эта библиотека? я в своё время перелопатил много чего разного (jQuery, prototype), но ничего компактнее и проще в использовании не нашёл.
|
|
|
|
С нами с 16.02.07
Сообщения: 15
Рейтинг: 21
|
Добавлено: 29/04/10 в 00:39 |
alex.raven писал: | Вот тебе готовый работающий пример:
...
для этой всей байды использовалась библиотека JsHTTPRequest Дмитрия Котерова (dklab, denwer) |
JsHTTPRequest - согласен, забыл за нее. =)
xajax использовал потому что она самая простая, по крайней мере раньше была, сейчас ее немного переделали.
Код: | if(document.getElementById('scrolled').value=="0") |
а чем плоха 1 булева переменная?
Код: | <script type="text/javascript">
var ScrollReported = false;
function update_my_php_script()
...
if (!ScrollReported)
...
update_my_php_script();
ScrollReported = !ScrollReported;
// или ScrollReported = true;
|
|
|
|
|
Мотиватор :)
С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607
|
Добавлено: 29/04/10 в 00:54 |
NetSpider писал: |
а чем плоха 1 булева переменная?
|
не знаю, где-то протупил, не работало у меня, т.е присваиваю глобальной переменной внутри функции 1, а в результате она всё равно 0
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 29/04/10 в 02:57 |
>почему именно эта библиотека? я в своё время перелопатил много чего разного (jQuery, prototype), но ничего компактнее и проще в использовании не нашёл.
Оффтопик: забавно, единственный плюс ее для меня это грузить файло без флеша и айфреймов, в остальном довольно громоздка
|
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 29/04/10 в 21:12 |
ТС, а тебе для чего данные-то передавать, для статистики? Просто, если с GoogleAnalytics работаешь, то там можно прямо через его API данные о скроллинге в статистику добавлять, не мудрствуя лукаво.
|
|
|
|
С нами с 07.12.99
Сообщения: 1484
Рейтинг: 483
|
Добавлено: 29/04/10 в 21:25 |
если для статсов, то очень полезная штука clicktale.com
узнаешь много нового
|
|
|
|
https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 29/04/10 в 22:15 |
remorhaz: Хочется подобную проверку сделать для своих трейдеров. По идее, если скрола страницы небыло, но были клики по тумбам, которые без скролинга не увидеть, то по идее это бот. Вот только, если боты и такой вариант эмулируют, то не имеет смысла все это закручивать.
|
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 29/04/10 в 23:51 |
Эмулировать это не проблема, но, думаю, многие боты на этом заморачиваться не будут. Это ж нужно еще догадаться, что у тебя такая проверка происходит. Но внимательный человек догадается, конечно же.
|
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 29/04/10 в 23:56 |
Достаточно в общем-то отследить HTTP-поток при помощи, например, Tamper Data - и сразу будет видно, что идут лишние обращения к серверу. Так что это в общем так, от дурачка защита.
|
|
|
|
https://views.biz/
С нами с 06.10.08
Сообщения: 1560
Рейтинг: 1601
|
Добавлено: 01/05/10 в 06:15 |
Действительно, может метод далеко и не лучший, но если боты до сих пор и по скрытым ссылкам кликают и тд. То может худо бедно и поможет такой вариант. Может кто-нибудь разовьет идею дальше?
|
|
|
|
С нами с 16.02.07
Сообщения: 15
Рейтинг: 21
|
Добавлено: 01/05/10 в 09:57 |
Где-то читал, что боты не умеют эмулировать событие OnMouseMove, правда/нет - не знаю. Можно и его фиксировать и анализировать статистику.
|
|
|
|
Мотиватор :)
С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607
|
Добавлено: 01/05/10 в 15:55 |
Вообще-то, боту нет необходимости скроллить страницу, чтобы добраться до тумбы, которая без прокрутки не видна - т.к бот получает сразу всю страницу, и соответственно, может имитировать клики по любым. В таком случае надо вешать проверку и onscroll и onclick, чтобы проверять что это были клики именно из браузера, а не имитация скриптом.
|
|
|
|
С нами с 19.05.08
Сообщения: 1894
Рейтинг: 3625
|
Добавлено: 01/05/10 в 17:30 |
alex.raven: Скажу честно идея хороша и стремление правильное. Но есть пару но: лично я знаю 2 способа как превратить обычный браузер в бота и все события будут и всё остальное. И эти способы никакое не читерство, а просто средства автоматизации действий. А от простых ботов достаточно следующих проверок:
- линки скрытые (впрочем как и невидимые тумбы с линками)
- поддержка JS
- прогрузка всего контента полностью
А развивая твою идею тебе необходима следующая инфа на сервере чтобы сказать что это был бот:
- страница на которой был произведён клик.
- номер тумбы по которой был произведён клик(судя по всему ajax запрос придёться слать по каждому клику что может добавить тормозов юзеру)
- высота клиентской области юзера
- была ли страница проскролена
- желательно бы ещё писать User-Agent
Зная все эти параметры можно почти со стопроцентной вероятностью найти не слишком умного бота. Но возникают проблемы такие: В некоторых браузерах этот скрипт может например не работать или работать не правильно. первое что приходит на ум это например мобильные устройства или экзотика какая-нить ещё.
В общем дерзай. Если какая-то помощь техническая понадобиться стучи.
|
|
(!)Внимание Ero Advertising дополнительный Еврики от продажи рекламы. Особенно попандеров и мобилок.
|
3
|
|
|