2010-01-16 1 views
1

Я пробовал его с помощью jQuery, но он не работает.Отслеживание исходящих ссылок с помощью Javascript и PHP

<script> 
    $("a").click(function() { 
     $.post("http://www.example.com/trackol.php", {result: "click" 
    }, "html"); 
    }); 
</script> 
<a href="http://www.google.com">out</a> 
+2

Это скрипт работает после того, как на OnLoad событие? (или после того, как dom разобрался?) В противном случае селектор $ ("a") не будет соответствовать следующим ссылкам! –

ответ

7

Чтобы получить лучшие результаты, вы должны изменить две вещи в своем подходе

  1. Использование onmousedown вместо click - таким образом, вы получите несколько дополнительных миллисекунд сравнительному lete запрос отслеживания, в противном случае браузер может не запускать соединение с вашим трекером вообще, поскольку он уже перемещается от исходной страницы. Недостатком является то, что вы можете получить некоторые ложноположительные подсчеты, так как щелчок пользователя не может завершить клик (например, держит кнопку мыши и перемещает курсор от ссылки), но в целом это жертва, которую вы должны быть готовы сделать - учитывая лучшее качество отслеживания.
  2. Вместо звонка Ajax ($.post('...')) используйте изображение pre-fetcher (new Image().src='...'). Тот факт, что трекер не является изображением, в данном случае не имеет отношения к делу, потому что вы не хотите использовать итоговое «изображение» в любом случае, вы просто хотите сделать запрос на сервер. Ajax-вызов - это двухстороннее соединение, поэтому требуется немного больше времени и может выйти из строя, если браузер уже перемещается, но предварительный приемщик изображений просто отправляет запрос на сервер, и на самом деле не имеет значения, получаете ли вы что-то или не.

Таким образом, решение было бы что-то вроде этого:

<script> 
$(document).ready(function() { 
    $("a").mousedown(function(){ 
     new Image().src= "http://www.example.com/trackol.php?result=click"; 
    }); 
}); 
</script> 

<a href="http://www.google.com">out</a> 
2

Вместо того, чтобы вызвать скрипт отслеживания PHP с использованием JavaScript, вы могли бы просто ссылку на ваш скрипта отслеживания прямо и он, в свою очередь перенаправляет ответ на конечный пункт назначения, что-то вроде этого:

<a href="http://www.example.com/trackol.php?dest=http://www.google.com">out</a> 

и в PHP скрипт, после того, как вы делаете ваши отслеживания вещи:

... 
header("Location: $dest"); 
+0

Это предполагает, что скрипт отслеживания находится на вашем сервере, конечно. – Thilo

+2

Хотя это возможность, вероятно, лучше использовать JS для отслеживания, поэтому поисковые системы используют правильные ссылки. Вы также можете иметь PHP-выход обычных ссылок и использовать JS для автоматического префикса их с чем-то вроде http: //www.example.com/trackol.php? Dest = '. –

1

Как уже отмечалось, проблема вы не используете скрипт после загрузки DOM. Вы можете это исправить, обернув скрипт JQuery внутри $(function() { }, например, так:

Это работает:

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Tracking outgoing links with JavaScript and PHP</title> 
</head> 
<body> 
    <p><a href="http://www.google.com/">Test link to Google</a></p> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
    <script> 
    $(function() { 
    $('a').click(function() { 
    $.post('http://www.example.com/trackol.php', { result: 'click' }, 'html'); 
    }); 
    }); 
    </script> 
</body> 
</html> 

в действии здесь: http://jsbin.com/imomo3