2016-04-18 7 views
0

Ich möchte sicherstellen, dass GTM ordnungsgemäß geladen wurde, bevor Sie einige Javascript auf meiner Website ausführen. Dieser JS-Code kann nicht in ein GTM-Tag verschoben werden, da er von Variablen abhängt, die für das Framework eindeutig sind.Wie führe ich Site-Code nur aus, wenn der Tag-Manager korrekt geladen ist?

if(typeof google_tag_manager !== 'undefined') { 
    //I tried running my code here 
} 

Wenn ich getestet, was oben geschrieben wurde, würde den Code innerhalb des Blocks nicht ausgeführt, sondern die Überprüfung angegeben, den Wert von google_tag_manager in der Konsole, dass es sich um ein Objekt und nicht undefiniert war. Was ist der beste Weg, um sicherzustellen, dass GTM vor dem Ausführen von JS-Code geladen hat?

Antwort

1

Dieser JS-Code kann nicht in ein GTM-Tag verschoben werden, da er von Variablen abhängt, die für das Framework eindeutig sind.

Wie es aussieht, klingt das nicht wie ein echter Vorbehalt. Sie könnten die Variablen data drücken und Ihren Tag mit einem benutzerdefinierten Ereignisse auslösen:

dataLayer.push({ 
'data' : myUniqeVars, 
'event' : 'mySpecialEvent' 
}); 

oder sogar die Variablen als globale JavaScript-Variablen zugreifen.

Alternativ können Sie eine globale Javascript-Variable (zB window.startMyTag = true) in einem benutzerdefinierten HTML-Tag festlegen, das auf pageview (dem frühesten Punkt, an dem der GTM-Code sicher geladen ist) ausgelöst wird und darauf wartet wäre eine schreckliche Lösung (und der Grund, warum Sie einen Listener brauchen, ist, dass GTM-Code asynchron geladen wird; dies scheint der Grund dafür zu sein, dass Ihr Code nicht ausgelöst wird und Sie immer noch den gtm_tag_manager auf der Konsole sehen, weil die Konsole nur IIRC wird nachdem das DOM geladen ist).

Oder Sie können einen Listener für Änderungen in der DataLayer einrichten - wenn GTM eines der ersten Dinge auslöst, ist es, Schlüssel/Wert-Paar "event: gtm.js" auf die DataLayer zu setzen, und Sie könnten das verwenden um deinen Code auszulösen (nicht die beste Idee möglicherweise - wenn du eine Maschine hast, die Zustände steuert, möchtest du vielleicht nicht mit den Zuständen von außen durcheinander kommen, aber solange deine einzige Auflistung sicher ist. Überschreibe nicht einfach den Push Methode der dataLayer allerdings auf GTM-Ereignisse zu achten, denn das tut GTM selbst schon und bricht ab, wenn Sie die bereits geänderte Methode überschreiben.

Ich wäre neugierig, warum Sie denken, dass Sie Ihren Code nicht innerhalb von GTM ausführen können, also wenn Sie ein Beispiel geben können, wäre ich wirklich dankbar.

+0

Der Kontext einer E-Commerce-SaaS Plattform geladen ist. Auf der Kategorieseite beispielsweise möchten wir die E-Commerce-Daten eines Produkts beim Anklicken senden. Wenn Sie es genauer betrachten, haben Sie vielleicht recht, es könnte so modifiziert werden, dass es in einem Tag funktioniert. – rjfrizz

+0

Wenn die Werte als JS-Variablen irgendwo im globalen Gültigkeitsbereich vorhanden sind und Sie GTM-Code auf derselben Seite haben, ist es fast sicher, dass Sie Ihren Code innerhalb eines Tags arbeiten lassen können. –

0

Firing benutzerdefinierte js Verwendung window.onload stellt sicher, dass GTM

Verwandte Themen