Ich arbeite an einem Tracking-Skript für ein ziemlich ausgefeiltes CRM für die Verfolgung von Formularaktionen in Google Analytics. Ich versuche, den Wunsch, Formularaktionen genau zu verfolgen, mit dem Bedarf auszugleichen, um zu verhindern, dass ein Formular nicht funktioniert.
Nun, ich weiß, dass etwas nicht funktioniert.
%Vor%Das DOM entlädt sich bevor es eine Chance hat zu verarbeiten.
Also, eine Menge Beispielcode empfiehlt etwas wie dieses:
%Vor% Das ist in meisten Fällen zuverlässig, aber es macht mich nervös. Was passiert, wenn etwas zwischen e.preventDefault();
passiert und wenn ich die DOM-basierte Submit-Funktion auslöst? Ich habe die Form total gebrochen.
Ich habe einige andere Analytics-Implementierungen untersucht und dabei etwas Ähnliches bemerkt:
%Vor% Im Grunde, anstatt die Formularübermittlung zu unterbrechen, wird sie dadurch unterbunden, dass angenommen wird, dass, wenn jemand die Eingabetaste aufruft oder herunterdrückt, dieses Formular übermittelt wird. Offensichtlich führt dies zu einer gewissen Anzahl von Fehlalarmen, aber es eliminiert vollständig die Verwendung von e.preventDefault();
, was meiner Meinung nach das Risiko beseitigt, dass ich jemals verhindern kann, dass ein Formular erfolgreich eingereicht wird.
Also, meine Frage:
Sie sind bei diesem GooglePlex furchtbar hell und sie haben eines Tages etwas ausprobiert, als ob das passieren würde und jetzt, klar genug. Warum gibst du nicht einen guten Versuch:
%Vor% Das _gaq.push
thigamajigger führt seine Elemente sequentiell aus, also sollten Sie scherzhaft sein.
Und nein, ich weiß nicht, warum ich plötzlich so angefangen habe zu reden.
Ich verwende einen anderen Ansatz und erstelle das Ereignis-Tracking-Skript auf der Seite, die aus dem Senden resultiert. Sie könnten es als deferred event tracking bezeichnen.
Ich habe einen Blogpost mit allen Details zu meiner Vorgehensweise bei der Ereignisverfolgung in Backend-Aktionen. Es ist voreingenommen gegenüber Java-Struts, aber Sie können die allgemeine Idee bekommen.
Der Grund ist, dass ich einige Dinge verfolgen möchte, nachdem sie auf der Serverseite passiert sind. In diesem Fall, nachdem das Formular vom Server übermittelt und verarbeitet wurde.
Was ich mache (sehr zusammengefasst):
Wenn Formulare immer funktionieren müssen, aber das Tracking geopfert werden kann, wenn es absolut notwendig ist, können Sie es einfach versuchen / abfangen.
%Vor% e.preventDefault()
muss nicht direkt am Anfang des Funktionsaufrufs stehen. Warum haben Sie nicht einfach eine if
-Anweisung, um zu überprüfen, ob alles korrekt funktioniert, und rufen Sie nur e.preventDefault()
auf, wenn dies der Fall ist. Wenn eine Funktion in der Kette nicht das erwartete Ergebnis zurückgibt, setzen Sie eine Variable submitted
auf false
und verhindern Sie nicht den Standardwert.
Dies ist vielleicht etwas schwieriger zu handhaben, wenn es um etwas asynchrones geht (wie zum Beispiel setTimeout
, aber es wird Möglichkeiten geben, ziemlich sicher zu machen, je nachdem wie der Code aussieht. So können Sie nach Methoden suchen Existieren mit if (_gaq.push)
(zum Beispiel). Sie können nicht 100% sicher sein, ohne jede einzelne Kombination in jedem Browser zu testen, aber ich denke, dass Sie damit ein ziemlich zufriedenstellendes Ergebnis erzielen können.
Gibt es einen Grund, warum Sie den Aufruf von Google Analytics nicht einfach serverseitig basierend auf dem empfangenen POST ausgeben können?
Ich weiß nicht, wie Ihr System aufgebaut ist, aber dieses PHP-Projekt würde beispielsweise einen Aufruf an GA ausgeben, wodurch das Problem des DOM-Entladens, der Notwendigkeit, das Formular zu brechen, usw. beseitigt wird / p>
Ich nehme zur Kenntnis, dass Sie möglicherweise einen Cookie erfassen müssen - Sie könnten den Wert in ein verstecktes Feld im Formular schreiben, bevor es gesendet wird?
Um auf @ Malvolios Antwort zu erweitern: Sobald gaq das Ereignis sendet, wird das nächste Element in der Warteschlange verarbeitet. Dies bedeutet, dass die Ereignis-HTTP-Anforderung möglicherweise auf der Clientseite abgebrochen wird, GA jedoch die Anforderung erhält. Machen Sie sich keine Sorgen darüber, die Ausführung des Skripts zu blockieren, bis die Antwort beendet ist. Es ist ein Feuer und Vergessen-Szenario.
Tags und Links javascript jquery google-analytics javascript-events analytics