Я пробовал его с помощью jQuery, но он не работает.
<script> $("a").click(function () { $.post("http://www.example.com/trackol.php", {result: "click" }, "html"); }); </script> <a href="http://www.google.com">out</a>
Чтобы получить наилучшие результаты, вы должны изменить две вещи в своем подходе
onmousedown
вместо click
– таким образом вы получите несколько дополнительных миллисекунд, чтобы выполнить запрос на отслеживание, иначе браузер не сможет запустить соединение с вашим трекером вообще, поскольку он уже перемещается от исходной страницы. Недостатком является то, что вы можете получить некоторые ложноположительные подсчеты, так как щелчок пользователя не может завершить клик (например, держит кнопку мыши и перемещает курсор от ссылки), но в целом это жертва, которую вы должны быть готовы сделать – учитывая лучшее качество отслеживания. $.post('...')
) используйте предварительный выбор 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>
Вместо того, чтобы использовать JavaScript для вызова сценария отслеживания php, вы можете просто ссылаться на свой скрипт отслеживания напрямую и в свою очередь перенаправить ответ на конечный пункт назначения, примерно так:
<a href="http://www.example.com/trackol.php?dest=http://www.google.com">out</a>
и в PHP-скрипте, после того, как вы сделаете свой материал для отслеживания:
... header("Location: $dest");
Как уже упоминалось, проблема в том, что вы не запускаете скрипт после загрузки 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