タグマネージャーでjsのloadイベントを発火させたいとき
Google Tag Manager便利ですよね。
しょうがない事情で、少し凝ったjavascriptをタグマネに設定しないといけないことがあって、最初以下のようなコードを書いてタグマネ経由で配信したら全然コードが動かない・・
これは、ブラウザがページを読み込んだ時点で発火するload
イベントを拾って、何か任意の処理を実行するためのコードです。
window.addEventListener('load', (event) => {
// 下はサンプル。実際はここにいろいろと難しいコードを書き足しています。
console.log('test');
});
動かない、というか、ブラウザによって動かないものと動くものがあるという厄介なケース。
Safariは全く動かないけどGoogle ChromeはOKなどなど。
で、オチなんですけど、タグマネの配信トリガーが問題でした。
最初はよく使うであろうAll Pagesのトリガーと上記のコードを紐つけていたんですがこれはダメ。
そしてトリガーをページビュー - ウィンドウの読み込みにしたら、どのブラウザでも動くようになりました。
そして、このトリガーを選んだときはjsのコード内でaddEventListenerする必要はありません。
// 目的のコードを書くだけでOK!!
console.log('test');
つまり、この動作から察するとGoogle Tag Manager自体にwindowイベントなんかをフックするための仕組みがすでに備わっていて、そこに自分の好きなタグやスクリプトを差し込んでくださいという作りになっているわけね。
ブラウザによってはAll Pagesのトリガーが走るときにはすでにloadイベントなんてとっくの昔に終わっているのかもしれない。
知ってる人には当然のことかもしれんけど、結構悩んだ。
配信トリガーは他にもいくつかあって、試してはいないけれどDOM Readyなんかは多分、DOMContentLoadedのことじゃないかな。
この記事の環境情報
- 2023年4月24日時点のGoogle Tag Manager
JavaScriptに関する他の記事を読む
- [JavaScriptをわかりやすく]removeメソッドで自身を動的に削除する
- [JavaScriptをわかりやすく]子要素をremoveChildで動的に削除する
- [JavaScriptをわかりやすく]insertAdjacentHTMLでタグを直接追加する
- [JavaScriptをわかりやすく]beforeとafterで指定した要素の前後に動的に要素を追加する
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら
- 「ibproxyは、開発元を検証できないため開けません」の対処方法