2009-11-22 5 views
2

Ok, fondamentalement, j'ai fait un script (celui-là) qui fait un .post à un fichier php, qui insèrent ensuite quelques informations dans une base de données pour suivre les clics de lien. Fonctionne bien dans IE8 et Opera 10, mais, ne fonctionne pas dans Firefox. Il charge simplement la cible du lien sans l'insérer dans la base de données. Cela ne fonctionne que si j'ajoute une alerte() ou retourne false; quelque chose qui l'empêche d'aller sur le lien cliqué, ce qui n'est pas ce dont j'ai besoin. J'ai essayé toutes sortes de choses, rien n'y fait. On dirait que Firefox charge l'autre page plus vite qu'il ne peut l'analyser. Opera et IE attendent, FF ne pas. Des idées qui pourraient aider?Firefox .post et jquery

$(document).ready(function(){ 
      $("div.buy_block_content a,div.upper-banner a, a.lehitse-big, a.lehitse-small").click(function(){ 
      var type = $(this).attr('id'); 
      var klass = $(this).attr('class'); 
      var pathname = window.location.pathname; 
      var linka = $(this).attr('href'); 
      $.post("/sites/all/modules/statistics_track/track.php", { link: linka, source: pathname, type: type, klass: klass }); 
      }); 
     }); 

Edit: Worth à dire est que le suivi se fait sur Drupal (CMS) de sorte que toute modification du noyau ou en passant des choses avec le lien ne contribue pas. Et le suivi est fait pour les deux liens internes, et les liens qui vous mènent à d'autres sites. Je suis simplement curieux, pourquoi Opera et IE le mangent, et FF ne l'aime pas ...

Répondre

0

J'ai remplacé le .click par mousedown, et inséré le script codé en dur dans la page (était un fichier externe avant). On dirait de travailler maintenant pour FF.

1

Soumettre un formulaire normal à la place. $.post est un wrapper $.ajax et s'attend donc à ce que vous soumettiez via XHR. Par exemple:

$(document).ready(function(){ 
    $("div.buy_block_content a,div.upper-banner a, a.lehitse-big, a.lehitse-small").click(function(){ 
     var type = $(this).attr('id'); 
     var klass = $(this).attr('class'); 
     var pathname = window.location.pathname; 
     var linka = $(this).attr('href'); 
     var $form = $("<form id='myForm' method='post' action='/sites/all/modules/statistics_track/track.php'></form>"); 
     var $type = $("<input type='hidden' name='type'/>").val(type); 
     var $linka = $("<input type='hidden' name='linka'/>").val(linka); 
     var $pathname = $("<input type='hidden' name='pathname'/>").val(pathname); 
     var $klass = $("<input type='hidden' name='klass'/>").val(klass); 
     $form.append($type); 
     $form.append($linka); 
     $form.append($pathname); 
     $form.append($klass); 
     $("body").append($form); 
     $("#myForm").submit(); 
    }); 
}); 
+0

+1. Il ne sert à rien d'utiliser AJAX si vous voulez que la page soit rechargée quand même. – Matt

+0

Nop, ne fonctionne pas maintenant même dans d'autres navigateurs. Les liens vous amènent à d'autres sites, donc je pense que les formulaires ne sont pas la meilleure solution. – Djeux

+0

Probablement la meilleure solution serait de faire en sorte que le navigateur attende une réponse, puis rediriger, mais n'ont pas compris comment faire cela. – Djeux

1

Pour le faire de manière fiable, vous auriez à revenir faux et passer une fonction de rappel à $.post qui a suivi le lien:

.click(function(){ 
    var that= this; 
    $.post(
     '/sites/all/modules/statistics_track/track.php', 
     {link: this.href, source: location.pathname, type: this.id, klass: this.className}, 
     function() { 
      location.href= that.href; 
     } 
    ); 
    return false; 
}); 

Ce serait très désagréable et je n » Je le recommande du tout. Cela annulerait l'annulation de la navigation (c'est-à-dire en cliquant sur Arrêter ou en cliquant sur un deuxième lien) et ralentirait tous les clics de lien (plus lent que votre script existant les fait déjà).

Ce comportement de suivi de lien est appelé un lien ping. HTML5 propose un attribut ping sur l'élément a qui fera cela pour vous sans que tous les AJAX déblayent. Malheureusement, il n'est pas largement supporté et est actuellement désactivé dans Firefox en raison d'un tollé général. Ce qui devrait vous donner un conseil: les utilisateurs détestent les liens ping.

En effet, vous êtes généralement beaucoup mieux sans pings. Les liens internes vous transmettent déjà leur référence pour l'analyse de votre journal. vous pouvez ajouter des parties de requête à ces liens pour le suivi si vous le souhaitez. Pour les liens externes, vous pouvez les envoyer via une page de redirection 301 pour obtenir les informations de suivi (comme par exemple les moteurs de recherche lorsque vous cliquez sur leurs liens).