2016-04-18 5 views
0

私のサイトでいくつかのjavascriptを実行する前にGTMが正しくロードされていることを確認します。このJSコードは、フレームワーク固有の変数に依存するため、GTMタグに移動することはできません。タグマネージャが正しくロードされている場合にのみサイトコードを実行するにはどうすればよいですか?

私は上記の投稿されたものを試験した場合、ブロック内のコードが実行されないでしょう
if(typeof google_tag_manager !== 'undefined') { 
    //I tried running my code here 
} 

が、コンソールにgoogle_tag_managerの値をチェックすると、オブジェクトと未定義ではないことが示されました。いくつかのjsコードを実行する前にGTMがロードされていることを確認する最良の方法は何ですか?

答えて

1

このJSコードは、フレームワーク固有の変数 に依存しているため、GTMタグに移動することはできません。

実際の警告のようには聞こえません。あなたはdataLayerに変数をプッシュし、カスタムイベントであなたのタグを引き起こす可能性:

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

あるいはグローバルJavaScriptの変数として変数にアクセスします。

また、ページビュー(GTMコードが確実に読み込まれる最も早い時点)で発生したカスタムhtmlタグでグローバルなjavascript変数(例:window.startMyTag = true)を設定して、恐ろしい解決策になるでしょう(あなたがリスナーを必要とするのは、GTMコードが非同期的にロードされているということです)、これはあなたのコードが起動せず、gtm_tag_managerがコンソールに表示される理由と思われます。 DOMがロードされた後)。

また、dataLayerの変更のリスナーを設定することもできます.GTMが発生する最初の操作の1つは、dataLayerにキーと値のペア「event:gtm.js」を配置することですあなたのコードを発射することができます(おそらく最良の考えではありません - あなたが状態を制御するマシンを持っていれば、外部から状態を混乱させたくないかもしれませんが、唯一のリストであれば安全です。 GTMイベントを監視するためにdataLayerメソッドを使用します。GTMイベント自体はすでに実行されているため、既に変更されたメソッドを上書きすると破損します)。

私はGTM内からコードを実行できないと思うのはなぜだろうかと思いますが、例を挙げると本当に感謝しています。

+0

コンテキストはSaaS eコマースプラットフォームです。たとえば、カテゴリページでは、クリックされた商品に関連するeコマースデータを送信します。もっと見ると正しいかもしれませんが、タグ内で動作するように修正することができます。 – rjfrizz

+0

値がJS変数としてグローバルスコープのどこかに存在し、同じページにGTMコードがある場合、タグ内からコードを取得できることはほぼ確実です。 –

0

window.onloadを使用してカスタムjsを実行すると、GTMがロードされます。

関連する問題