2009-10-05 5 views
1

J'essaie de faire un script de suivi de lien. Il devrait fonctionner comme Google Analytics seulement, il devrait faire des publications sur notre propre serveur. J'utilise jQuery pour ça. Le code que j'ai écrit à ce jour est le suivant:Script de suivi de lien Javascript + Safari

jQuery(document).ready(function() { 

var opts; 

jQuery.fn.trackAllLinks = function(settings) { 
    settings = jQuery.extend({}, jQuery.fn.trackAllLinks.defaults, settings); 
    opts = settings; 

    function track() { 
     href = jQuery(this).attr('href'); 
     var trackImage = new Image(1, 1); 
     trackImage.src = opts.linkredirector + '?eurl=' + jQuery.URLEncode(href) + '&rnd=' + new Date().getTime() + '&title=trackerimage.gif'; 
     trackImage.onload = function() { 
      trackImage.onload = null; 
      doNothing(); 
     } 
     delay(300); 
     return true; 
    }; 

    function delay(mseconds) { 
     var currentTime = new Date(); 
     var endTime = currentTime.getTime() + mseconds; 
     while (currentTime.getTime() < endTime) { 
      currentTime = new Date(); 
     } 
    } 

    function doNothing() { 
    } 

    if(jQuery(this).is("a")) { 
     jQuery(this).click(track); 
    } 

    jQuery(this).find("a").click(track); 

}; 

jQuery.fn.trackAllLinks.defaults = { 
    linkredirector : '__url_to_post_on__' 
}; 

}); 

Cela fonctionne très bien dans tous les navigateurs sauf Safari. Lorsque j'utilise un lien mailto ou une ancre, cela fonctionne, mais quand je suis en train de créer un lien vers une autre page, cela ne fonctionne pas. J'ai testé beaucoup d'implémentations différentes et je n'arrive pas à le faire fonctionner. Quelqu'un d'entre vous a une idée de ce qui me manque? J'ai essayé de comprendre comment Google Analytics fonctionne et, pour autant que je puisse le voir, il fait la même chose. Quand j'utilise WireShark pour surveiller mon réseau, je vois que l'image de Google est demandée mais que mon image ne l'est pas.

Salue, Daan

+0

Cela ne fait probablement pas beaucoup de différence, mais est ce problème dans Safari sur Windows? ou sur le Mac? – scunliffe

+0

Je l'ai testé dans les deux versions et les deux donnent le même problème. Dans Safari on mac j'ai pu déboguer le javascript et il est correctement exécuté ... c'est comme si l'image n'était pas chargée à temps, car après le clic vous serez sur une autre page. –

Répondre

0

Essayez d'augmenter le retard à quelque chose d'énorme pour voir si Safari est en train de prendre un petit peu plus longtemps que votre retard - c'est ma conjecture à ce sujet.

+0

J'ai oublié de le dire, mais j'ai déjà essayé de le régler un peu plus longtemps ... jusqu'à ce que quelques secondes et rien ne semble fonctionner:/c'est comme si Safari attendait que le javascript soit fait avant de demander l'image. Je viens aussi de voir que lorsque je le combine avec GA et que ma requête est faite avant GA, elle sera exécutée. –

+0

Pourquoi ne pas annuler l'action par défaut, mais la configurer pour qu'elle se produise plus tard. c'est-à-dire annuler la navigation, mais définir un délai pour naviguer après un court délai? – Fenton

0

C'est aléatoire, mais vous pouvez essayer d'ajouter un paramètre aléatoire dans la chaîne de requête (à la fois le nom valeur &), comme:

Math.random(0, 1000) + '=' + Math.random(0, 1000) 

J'ai dû le faire dans le passé pour obtenir Safari enregistrer une ressource chargée dynamiquement. (Je vois que vous avez déjà &rnd=, mais peut-être essayer de randomiser le nom, aussi?)

Questions connexes