只有在正确加载标记管理器时,如何执行站点代码?

时间:2016-04-18 18:18:05

标签: google-tag-manager

我想在我的网站上运行一些javascript之前确保GTM已正确加载。这个JS代码无法移动到GTM标记中,因为它依赖于框架特有的变量。

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

当我测试上面发布的内容时,块内的代码将无法运行,但是在控制台中检查google_tag_manager的值表明它是一个对象而未定义。在运行某些js代码之前,确保GTM已加载的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

  

此JS代码无法移动到GTM标记中,因为它依赖于此   框架特有的变量。

因为它看起来并不像一个真正的警告。您可以将变量推送到dataLayer并使用自定义事件触发标记:

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

甚至可以将变量作为全局javascript变量访问。

或者你可以在一个自定义的html标签中设置一个全局的javascript变量(例如window.startMyTag = true),该标签是在pageview(当前加载GTM代码的最早点)上触发的,并且会监听它,尽管那会是一个可怕的解决方案(你需要一个监听器的原因是GTM代码是异步加载的;这似乎是你的代码没有激活的原因,你仍然在控制台上看到gtm_tag_manager,因为控制台只有在IIRC后可用DOM已加载)。

或者你可以为dataLayer中的更改设置一个监听器 - 当GTM触发它的第一件事就是在dataLayer上放置键/值对“event:gtm.js”,你可以用它来解雇你的代码(可能不是最好的想法 - 如果你有一台控制状态的机器你可能不想从外面弄乱状态,但只要你唯一的列表你应该是安全的。不要简单地覆盖推送方法dataLayer虽然要观察GTM事件,因为这就是GTM本身已经做的事情,如果你覆盖已经修改过的方法它会破坏。)

我很好奇为什么你认为你不能在GTM中运行你的代码,所以如果你能给出一个例子我真的很感激。

答案 1 :(得分:0)

使用window.onload启动自定义js可确保GTM已加载