Je travaille sur un script de suivi pour un CRM assez sophistiqué pour le suivi des actions de formulaire dans Google Analytics. J'essaie d'équilibrer le désir de suivre des actions de formulaire avec précision avec le besoin Maintenant, je sais que faire quelque chose comme ça ne fonctionne pas. p> Les décharges DOM avant que cela ait la possibilité de traiter. P> Ainsi, beaucoup de code exemple recommande quelque chose comme ceci: p> ceci est fiable dans La plupart des cas , mais cela me rend nerveux. Et si quelque chose se passe entre J'ai perçu autour d'autres implémentations d'analyse et j'ai remarqué Quelque chose comme ça : p> essentiellement, au lieu d'interrompre le formulaire soumettre, préempter en supposant que si une personne est accumulée ou en saisissant bas sur ENTER, que ce formulaire est soumis. Évidemment, cela entraînera une certaine quantité de faux positifs, mais il élimine complètement l'utilisation de Donc, ma question: p> e.preventdefault (); code> et quand je me déplace pour déclencher la soumission basée sur DOM? J'ai totalement cassé la forme. P>
e.preventdefault (); code>, qui dans mon esprit élimine le risque que je puisse empêcher un formulaire de soumettre avec succès la soumission avec succès. . P>
7 Réponses :
Je devinerais de cette façon _trackevent serait synchrone mais je ne l'ai pas testé. P> P>
GA étant asynchrone n'est pas le problème. L'aspect asynchrone fait référence à la chargement du script initialement, pas à des appels ultérieurs. Une fois que Ga.js charge, _gaq.push ('_ trackevent', ...) code> appels exécutez juste aussi rapidement que
pagetracker._trackevent (...) code>
Si tel est le cas, vous pouvez envisager de rédiger votre propre fonction de trackedvant avec un gestionnaire de surlombie attaché à l'image __utm.gif, mais je pense que les gestionnaires de téléchargement pour les images ne sont pas aussi fiables dans certains navigateurs (par exemple, lorsqu'ils sont chargés de cache non tirés, mais Du chargement de cache ne devrait jamais arriver dans ce cas de toute façon). Une ancienne fonction de pagetrack: .google.com / p / Google-Analytics-JS / Source / Parcourir / Down / ...
Les tombes de ce que Googleplex est affreux et figurait un jour quelque jour quelque jour, comme celui-ci était tenu de se produire et de maintenant, bien sûr, il a. Pourquoi ne donnez-vous pas cela un bon essai: que et non, je ne sais pas pourquoi j'ai soudainement commencé à parler comme ça. p> p> _gaq.push code> thigamajigger exécute ses éléments de manière séquentielle, de sorte que vous devriez être jestement bien. P>
Mmmm, laissez-moi essayer à nouveau. La solution consistant à attendre une quantité de temps arbitraire et en supposant qu'il soit maintenant sûr de laisser la page est garantie i> à (a) perdre l'heure des utilisateurs ou (b) échoue en laissant au début (le Les cotes que vous devinerez correctement à chaque fois peut être ignorée). Au lieu de cela, vous avez besoin d'une technique dans laquelle vous êtes notifié lorsque le suivi est terminé. Heureusement, la file d'attente Google Analytics prévoit que: Tout ce que vous avez à faire est de pousser un objet de fonction à la fin de la file d'attente. Une fois que tout l'avance dans la file d'attente est terminé, cette fonction sera exécutée et soumettre votre formulaire.
Je réalise maintenant que vous pouvez également vous inquiéter de l'échec de «certains trucs de suivi» et provoquez ainsi le formulaire de ne jamais être soumis. Pour que vos deux choix soient, enveloppez tout le code, mais la soumission dans un blocage, à l'exception du bloc, qui est en sécurité par bâcly ou simple, n'appelle pas Pêturdefault jusqu'à la dernière ligne de la fonction, alors s'il y a une erreur, il a gagné 'T soit appelé et la soumission devrait i> toujours traversée, ce qui est élégant mais devrait être soigneusement testé.
_gaq.push ((fonction (fonction () { code> doit être
_gaq.push (fonction () { code>
J'utilise une approche différente et génère le script de suivi des événements de la page résultant de la soumission. Vous pouvez appeler cela suivi des événements différés em>. P>
J'ai écrit un Blog Post Avec tous les détails sur mon approche du suivi des événements dans les actions de Backend. Il est biaisé vers Java-Struts, mais vous pouvez obtenir l'idée générale. P>
La justification est que je veux suivre certaines choses après leur arrivée au serveur. Dans ce type de cas, après la soumission du formulaire et traitée par le serveur. P>
Ce que je fais (très résumée): p>
Y a-t-il une raison pour laquelle vous ne pouvez pas simplement émettre l'appel à Google Analytics du côté serveur en fonction du poste qu'il reçoit? p>
Je ne sais pas ce que votre système est intégré, mais par exemple, ce projet PHP émettrait un appel à GA, supprimant ainsi le problème du déchargement DOM, la nécessité de briser le formulaire, etc. < / p>
http://code.google.com/p/serversidegoogleanalytics/ P >
Je me rends compte que vous pourriez avoir besoin de capturer un cookie - vous pouvez écrire la valeur dans un champ masqué sous la forme avant qu'il ne soit soumis? P>
Cela pourrait fonctionner pour certaines personnes, mais malheureusement, dans cet environnement CMS, je n'ai pas accès au script du côté serveur. Tout doit être fait en JavaScript.
Et même si vous pouviez, vous i> payez pour les serveurs; Vos millions de clients apportent chacun son propre client.
Pour la postérité: le projet relié dans cette réponse a été retiré; Voir plutôt le nouveau projet code.google.com/p/php-ga
Cela pourrait être un peu plus difficile à gérer lorsqu'il s'agit de quelque chose d'asynchrone (tel que votre e.preventDefault () code> ne doit pas être juste au début de l'appel de la fonction. Pourquoi pas seulement avoir une instruction
si code> pour vérifier si tout fonctionne correctement et appelez uniquement
e.preventdefault () code> si c'est le cas. Si une fonction de la chaîne ne renvoie pas le résultat attendu, définissez une variable code> Soumis code> sur
false code> et n'empêchez pas la valeur par défaut. P>
Settimeout code>, mais il y aura des moyens de faire assez sûr, en fonction de votre ressemblance de votre code. Alors Vous pouvez vérifier si des méthodes existent avec
si (_gaq.push) code> (par exemple). Vous ne pouvez pas faire 100% sûr sans tester chaque combinaison de chaque navigateur, mais je pense que vous pouvez obtenir une jolie résultat satisfaisant avec cela. P>
Si vous devez avoir des formulaires toujours travailler, mais le suivi peut être sacrifié si ce n'est absolument nécessaire, vous pouvez simplement essayer / l'attraper.
$('form').submit(function(e){ try{ e.preventDefault(); var form = this; _gaq.push('_trackEvent', 'Form', 'Submit', $(this).attr('action')); //...do some other tracking stuff... setTimeout(function(){ form.submit(); }, 400); } catch (e) { form.submit(); } });
Mis en œuvre cette solution pour le même problème et bien fonctionné. Merci. Quelle est la raison exacte que Google a un problème avec le formulaire soumission et le suivi des événements? Au début, je pensais que c'était dû à la soumission de formulaire survenant et à recharger la page trop rapide pour que les données soient envoyées à Google, mais même après que j'ai ajouté la logique de SetTimeOut, il se produisait toujours. Seulement lorsque j'ai ajouté l'appel code> E.PreventDefault code> Tout a commencé à travailler à nouveau.
Réglage du délai d'attente n'est que la moitié de l'histoire. Si vous définissez un délai d'attente pour le formulaire Soumettre, mais n'étommez pas E.PreventDefault, vous laissez la soumission du formulaire se produire immédiatement (comme défaut de l'événement), qui préempte toujours l'appel à Analytics.
Pour développer la réponse de @ Malvolio: Une fois que GAQ envoie l'événement L'élément suivant de la file d'attente traitera. Cela signifie que la demande HTTP d'événement peut interrompre du côté client, mais GA recevra la demande. Ne vous inquiétez pas de bloquer l'exécution du script avant la fin de la réponse. C'est un scénario d'incendie et d'oublie. P>