[Adobe Analytics] Legacy s_code.js から AppMeasurement.js に乗り換える

もろもろ新機能を試したいので、s_code.js から AppMeasurement.js に乗り換えました。

やった事:

ファイル名は s_code.js のままで、 “DO NOT ALTER BELOW THIS LINE” のコメント行配下の本体を、 AppMeasurement.js の本体に貼りかえるというのが基本。

あと、 Media モジュールで動画計測してるので、モジュールを AppMeasurement_Module_Media.js + AppMeasurement_Module_Integrate.js の内容に貼りかえる。

次にプラグインの互換性についてはここで調べる。
https://marketing.adobe.com/resources/help/ja_JP/sc/implement/plugins_support.html
お、 getPageName プラグイン動くじゃーん、と思ってそのまま試したら s.wd がないとか s.fl がないなどエラーが出てきて怒られるので、下記のように一部を変更。

  • s.wd.location を location.href に置き換える
  • s_code.js から s.fl と s.pt を持って来る。

で、出来上がった getPageName プラグインがこれ。

/*
 * Plugin: getPageName v2.1 - for AppMeasurement.js
 */
s.getPageName=new Function("u",""
+"var s=this,v=u?u:''+location.href,x=v.indexOf(':'),y=v.indexOf('/',"
+"x+4),z=v.indexOf('?'),c=s.pathConcatDelim,e=s.pathExcludeDelim,g=s."
+"queryVarsList,d=s.siteID,n=d?d:'',q=z<0?'':v.substring(z+1),p=v.sub"
+"string(y+1,q?z:v.length);z=p.indexOf('#');p=z<0?p:s.fl(p,z);x=e?p.i"
+"ndexOf(e):-1;p=x<0?p:s.fl(p,x);p+=!p||p.charAt(p.length-1)=='/'?s.d"
+"efaultPage:'';y=c?c:'/';while(p){x=p.indexOf('/');x=x<0?p.length:x;"
+"z=s.fl(p,x);if(!s.pt(s.pathExcludeList,',','p_c',z))n+=n?y+z:z;p=p."
+"substring(x+1)}y=c?c:'?';while(g){x=g.indexOf(',');x=x<0?g.length:x"
+";z=s.fl(g,x);z=s.pt(q,'&','p_c',z);if(z){n+=n?y+z:z;y=c?c:'&'}g=g.s"
+"ubstring(x+1)}return n");
s.fl=function(x,l){return x?(''+x).substring(0,l):x};
s.pt=function(x,d,f,a){var s=this,t=x,z=0,y,r;while(t){y=t.indexOf(d);
y=y<0?t.length:y;t=t.substring(0,y);r=s[f](t,a);if(r)return r;
z+=y+d.length;t=x.substring(z,x.length);t=z<x.length?t:''}return ''};

あと、 s.getQueryParam じゃなくて、 s.Util.getQueryParam を使ってね、とヘルプに書いてあるので、 s.Util.getQueryParam を旧 s.getQueryParam にコピー

/*
 * Plugin: getQueryParam
 */
s.getQueryParam = s.Util.getQueryParam;

あちこち実装済みの s.getQueryParam をイチイチ s.Util.getQueryParam に書き換える必要はない。
※/* 20160831追記*/
このままだと第2・第3引数が正常に動作しないので、実はもうちょい工夫が要ります。
さらに、従来のs.getQueryParamのように、複数の引数をカンマ区切りで同時にセットする事も出来ません。
そこらへんも直す必要があります。
getQueryParam versus Util.getQueryParam

s.c_r と s.c_w は いまのところAppMeasurement でも動くので、そのままにしておく。

いまだに Target Classic 使ってるところは s.trackTNT プラグインを使う事もあるだろうけど、これも s.wd が見つからないというエラーが出るので、 s.wd を window に置換すれば良し。

とりあえず、プラグイン類は、 FormAnalysis 以外はちょいちょい弄れば AppMeasurement でも動きそうね。
FormAnalysis は DTM のイベントルール設定で似たような実装をする事も可能だろうけど、面倒だから今のところはスルー。