Ich versuche, einige benutzerdefinierte Javascript in einer selbst ausgeführten anonymous-Funktion zu schreiben. Dieses benutzerdefinierte JavaScript muss mit der globalen Google Analytics-Funktion ga
interagieren, die beim Laden der Google Analytics-Bibliothek erstellt wird. Der folgende Code ist in der <head>
der Seite Laden der Bibliothek:Javascript Google Analytics in selbstausführenden anonymen Funktion
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X', 'auto');
</script>
Am unteren Rand der Seite, meine benutzerdefinierte Javascript geladen wird. Dies ist der Code:
(function($, MutationObserver, shippingMethods, ga) {
function triggerPageview(path) {
ga('send', 'pageview', path);
}
})(jQuery, MutationObserver, shippingMethods, ga);
Was ich finde, ist, dass der aktuelle Code nicht erfolgreich einen Seitenaufruf auslösen. Die Seitenzugriff nur dann ausgelöst wird, wenn ich ga aus den Argumenten entfernen, wie folgt aus:
(function($, MutationObserver, shippingMethods) {
function triggerPageview(path) {
ga('send', 'pageview', path);
}
})(jQuery, MutationObserver, shippingMethods);
Der obige Code funktioniert, hat das erste Beispiel nicht. Ich gehe davon aus, dass ich falsch verstehe, wie diese Argumente für eine selbst-ausführende anonyme Funktion funktionieren sollen. Ich vermute, dass der Wert ga
ein Wert ist, wenn die Selbstausführungsfunktion ausgeführt wird, bevor die externe Google Analytics-Bibliothek geladen wird. Ich dachte jedoch, dass nach dem Laden der Bibliothek, und ga
aktualisiert wird, dass die ga
innerhalb meiner Funktion auch aktualisiert werden würde. Ist das nicht wahr?
angemeldet ich den Wert ga
vor dem Seitenzugriff ausgelöst wird, in, zuerst mit ga
bestanden vergleichen:
(function($, MutationObserver, shippingMethods, ga) {
function triggerPageview(path) {
console.log(ga);
ga('send', 'pageview', path);
}
})(jQuery, MutationObserver, shippingMethods, ga);
This Protokolle:
ƒ(){
(i[r].q=i[r].q||[]).push(arguments)}
Dann ga
Argument ohne:
(function($, MutationObserver, shippingMethods) {
function triggerPageview(path) {
console.log(ga);
ga('send', 'pageview', path);
}
})(jQuery, MutationObserver, shippingMethods);
Diese Protokolle:
ƒ (a){J(1);Z.D.apply(Z,[arguments])}
So, es scheint, ich bin definitiv etwas falsch zu verstehen. Kann mir jemand erklären, was hier vor sich geht? Was ist der "richtige" Weg, um auf einen globalen Code innerhalb des benutzerdefinierten Codes zu verweisen, den ich zeige?
Wenn ich ga
in meine Funktion überlasse, macht es eine "Kopie" des aktuellen Werts von ga
, anstatt auf die globale Variable ga
zu verweisen?