2010-01-16 7 views
1

Je l'ai essayé en utilisant jQuery mais cela ne fonctionne pas.Suivi des liens sortants avec Javascript et 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

Est-ce script en cours d'exécution après un événement onload? (ou après que dom ait été analysé?) Sinon, le sélecteur $ ("a") ne correspondra pas aux liens suivants! –

Répondre

7

Pour obtenir les meilleurs résultats, vous devriez changer deux choses dans votre approche

  1. utilisation onmousedown au lieu de click - cette façon, vous obtenez quelques millisecondes supplémentaires à comp Laisser la demande de suivi, sinon le navigateur pourrait ne pas démarrer la connexion à votre tracker car il navigue déjà loin de la page d'origine. L'inconvénient est que vous pourriez avoir des comptes faussement positifs, car le cliqueur pourrait ne pas finir le clic (par exemple, il maintient le bouton de la souris enfoncé et éloigne le curseur du lien), mais c'est un sacrifice que vous devriez être prêt à faire. compte tenu de la meilleure qualité de suivi.
  2. Au lieu d'un appel Ajax ($.post('...')), utilisez un pré-extracteur d'image (new Image().src='...'). Le fait que le tracker ne soit pas une image n'est pas pertinent dans ce cas car vous ne voulez pas utiliser l'image résultante, vous voulez juste faire une requête au serveur. L'appel Ajax est une connexion bidirectionnelle, donc cela prend un peu plus de temps et peut échouer si le navigateur est déjà en train de naviguer mais le pré-récupérateur d'image envoie simplement la requête au serveur et peu importe si vous récupérez quelque chose ou ne pas.

Donc, la solution serait quelque chose comme ceci:

<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

Au lieu d'utiliser JavaScript pour appeler un script de suivi de php, vous pouvez simplement un lien vers votre script de suivi directement et ont à leur tour rediriger la réponse à la destination finale, quelque chose comme ceci:

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

et dans le script PHP, une fois que vous faites vos trucs de suivi:

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

Cela suppose que le script de suivi est sur votre serveur, bien sûr. – Thilo

+2

Alors que c'est une possibilité, il est probablement préférable d'utiliser JS pour le suivi, donc les moteurs de recherche spider les liens corrects. Vous pouvez également avoir des liens normaux avec PHP, et utiliser JS pour les préfixer automatiquement avec quelque chose comme 'http: //www.example.com/trackol.php? Dest ='. –

1

Comme mentionné, le problème est que vous n'êtes pas d'exécuter le script après le DOM est chargé. Vous pouvez résoudre ce problème en encapsulant votre script jQuery à l'intérieur $(function() { }, comme ceci:

Cela fonctionne:

<!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> 

voir en action ici: http://jsbin.com/imomo3