マルチトラッキングして欲しいという依頼があったので、自分的に使いやすい形を考えてみた。
- トラッキングIDを一元管理できるようにしたいの
- 各IDごとにイベント送信を個別で行うのも面倒なのでイベント送信処理を一発して行う関数も欲しい
というわけで以下のようなものを作ってみた。試してみた感じ普通に使えてる。
<script>
var sites = [['UA-XXXXXXXX-X'],['UA-XXXXXXXX-X','trackB'],['UA-XXXXXXXX-X','trackC']];
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
!function(a){var n=[];a.forEach(function(a){var t=a[1],o=t?{name:t}:{};ga("create",a[0],"auto",o),n.push((t?t+".":"")+"send")}),window.gall=function(){var a,t,o=n,r=arguments;o.forEach(function(n){var o=[n];for(a=0,t=r.length;t>a;a++)o.push(r[a]);ga.apply(this,o)})}}(sites);
gall('pageview');
</script>
<script async src='//www.google-analytics.com/analytics.js'></script>
sitesに渡している2次元配列は、2項目目がcreateコマンドのnameキーの値として扱われる。
ここで自動的にcreateされたものに一括してsendする関数がgall()
。
これで、ga("foo.send",baz);ga("bar.send",baz)
みたいな書き方をしなくても良くなる。send専用なので第1引数はなく、そのままgall(baz,.....)
で良い。
gaでsendするのは大体XHR時のページ遷移ぐらいなので大体これで事足りる。ちょっと便利だと思うので面倒だなーと思ったら是非。