Tracking APIを使用すると、googleサ-バに送るデ-タをいろいろ操作、変更できる。あと、Google help forum の メジャ-回答者をcheck PPC_GURU http://www.google.com/support/forum/p/Google+Analytics/user?userid=12763409633022323645&hl=en ShoreTel http://www.google.com/support/forum/p/Google+Analytics/user?userid=12825868999993704298&hl=en ga.jsの概観
ga.jsで定義されているオブジェクトの紹介 名前がない(compilerで変換されている)ので、僕の命名でいきます。
以下、一時変数を手動で変換して、コメントをいれたもの。 勘違いも多いと思いますので、参考という事です。 (function () { var aa = "_gat", s = "_gaq", v = true, w = false, x = undefined, ba = "4.5.9", z = "length", A = "cookie", C = "location", D = "&", E = "=", F = "__utma=", H = "__utmb=", I = "__utmc=", ca = "__utmk=", K = "__utmv=", L = "__utmz=", M = "__utmx=", da = "GASO="; var NoVl = function (f) { return undefined == f || "-" == f || "" == f; }, ea = function (f) { return f["length"] > 0 && " \n\r\t".indexOf(f) > -1; }, //f文字列の中から、i-bの部分を抜き出し Q = function (f, i, b) { var j = "-", c; if (!NoVl(f) && !NoVl(i) && !NoVl(b)) { c = f.indexOf(i); if (c > -1) { b = f.indexOf(b, c); if (b < 0) b = f["length"]; j = GaSubstr(f, c + i.indexOf("=") + 1, b); } } return j; }, //数字もしくは".","-"以外のものが入っていないかcheck checkOnlyNumSome = function (f) { var i = false, b = 0, j, c; if (!NoVl(f)) { i = true; for (j = 0; j < f["length"]; j++) { c = f.charAt(j); b += "." == c ? 1 : 0; i = i && b <= 1 && (0 == j && "-" == c || ".0123456789".indexOf(c) > -1); } } return i; }, //encoding GaEncode = function (f, i) { var b = encodeURIComponent; return b instanceof Function ? i ? encodeURI(f) : b(f) : escape(f); }, //decoding GaDecode = function (f, i) { var b = decodeURIComponent, j; f = f.split("+").join(" "); if (b instanceof Function) try { j = i ? decodeURI(f) : b(f); } catch(c) { j = unescape(f); } else j = unescape(f); return j }, GaIndexOf = function (f, i) { return f.indexOf(i) > -1; }, GaPush = function (f, i) { f[f["length"]] = i; }, ToLower = function (f) { return f.toLowerCase() }, GaSplit = function (f, i) { return f.split(i); }, GaSubstr = function (f, i, b) { b = undefined == b ? f["length"] : b; return f.substring(i, b); }, GaJoin = function (f, i) { return f.join(i); }, GaHash = function (f) { var i = 1, b = 0, j; if (!NoVl(f)) { i = 0; for (j = f["length"] - 1; j >= 0; j--) { b = f.charCodeAt(j); i = (i << 6 & 268435455) + b + (b << 14); b = i & 266338304; i = b != 0 ? i ^ b >> 21 : i; } } return i; }, //setAllowlinkの時に使う? 一カ所だけで呼ばれる GaGlobalCheck = function () { var f = window, i = undefined; if (f && f.gaGlobal && f.gaGlobal.hid) i = f.gaGlobal.hid; else { i = GaRand(); f.gaGlobal = f.gaGlobal ? f.gaGlobal : {}; f.gaGlobal.hid = i; } return i; }, GaRand = function () { return Math.round(Math.random() * 2147483647); }, Z = { Ha: function (f, i) { this.bb = f; //検索エンジン用property this.nb = i; }, cookiePersistence: 63072000000, //二年ミリ秒 ib: false, _gasoDomain: undefined, _gasoCPath: undefined }; //初期化オブジェクト Z.DfVls = function () { //Gb var dfvls = this, //f i = Z.Ha; function setEngines(c) { return new i(c[0], c[1]); } //dfvls.engineの設定で呼ばれる function j(c) { var p = []; c = c.split(","); var m; for (m = 0; m < c.length; ++m){ p.push(setEngines(c[m].split(":"))); } return p; } dfvls.Ia = "utm_campaign"; dfvls.Ja = "utm_content"; dfvls.Ka = "utm_id"; dfvls.La = "utm_medium"; dfvls.utm_nooverride = "utm_nooverride"; //1で上書きしない dfvls.Na = "utm_source"; dfvls.Oa = "utm_term"; dfvls.Pa = "gclid"; dfvls.allowAnchor = 0; dfvls.allowLinker = 0; dfvls.sixmonthsec = "15768000"; //6ヶ月秒 Ya dfvls.thirtyminsec = "1800"; //30分秒 sb dfvls.otherengines = []; //追加検索エンジン用配列 dfvls.ignoredRef = []; dfvls.cse = "cse"; //カスタム検索エンジン nc dfvls.queryparameter = "q"; //google 検索パラメ-タ oc dfvls.maxSlot = 5; dfvls.engines = j("images.google:q,google:q,yahoo:p,msn:q,bing:q,aol:query,aol:encquery,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,looksmart:qt,about:terms,mamma:query,alltheweb:q,gigablast:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,aol:q,club-internet:query,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,netsprint:q,google.interia:q,szukacz:q,yam:k,pchome:q,kvasir:q,sesam:q,ozu:q,terra:query,nostrum:query,mynet:q,ekolay:q,search.ilse:search_for,rambler:words"); dfvls.outbounds = undefined; // b._setAutoTrackOutbound = function (a){ dfvls.lb = false; dfvls.cookiepath = "/"; dfvls.samplerate = 100; dfvls.oa = "/__utm.gif"; dfvls.ga = 1; dfvls.ha = 1; dfvls.v = "|"; dfvls.fa = 1; dfvls.da = 1; dfvls.Ra = 1; dfvls.domainName = "auto"; dfvls.I = 1; dfvls.hrefexaminlimit = 1000; //b._setHrefExaminLimit -1にした場合は、無制限 dfvls.Jc = 10; //utmb[2]の値 trackEventとsetOutBoundでdecrementする dfvls.Pb = 10; dfvls.Kc = 0.2; dfvls.namespace = undefined; dfvls.a = document; dfvls.e = window; }; //cookie下請けオブジェクト Z.CookieWorker = function (f) { //Z.Hb var cookieworker = this, dfvls = f; //b=f cookieworker.timenow = (new Date).getTime(); var j = ["__utma=", "__utmb=", "__utmc=", "__utmz", "__utmv=", "__utmx=", da]; function c(k, n, r, a) { var d = "", l = 0; d = Q(k, "2" + n, ";"); if (!NoVl(d)) { k = d.indexOf("^" + r + "."); if (k < 0) return ["", 0]; d = GaSubstr(d, k + r["length"] + 2); if (d.indexOf("^") > 0) d = d.split("^")[0]; r = d.split(":"); d = r[1]; l = parseInt(r[0], 10); if (!a && l < cookieworker.timenow) d = "" } if (NoVl(d)) d = ""; return [d, l]; } //cookie読み込み cookieworker.getCookieStr = function () { var k = dfvls.a["cookie"]; return dfvls.namespace ? cookieworker.Wb(k, dfvls.namespace) : k; }; //namespace指定時 cookieworker.Wb = function (k, n) { var r = [], a, d; for (a = 0; a < j["length"]; a++) { d = c(k, j[a], n)[0]; NoVl(d) || (r[r["length"]] = j[a] + d + ";"); } return r.join(""); }; //Writer, 実際の処理はwriteInCookieに移譲 //r=-1の時は、ブラウザと共に消えるcookie cookieworker.write = function (k, n, r) { var a = r > 0 ? h(r) : ""; if (dfvls.namespace) { n = cookieworker.kc(dfvls.a["cookie"], k, dfvls.namespace, n, r); k = "2" + k; a = e(r); } writeInCookie(k + n, a); }; //namespace指定時 cookieworker.kc = function (k, n, r, a, d) { var l = ""; d = p(d); a = m([a, cookieworker.timenow + d * 1], r); l = Q(k, "2" + n, ";"); if (!NoVl(l)) { k = m(c(k, n, r, true), r); l = GaJoin(l.split(k), ""); return l = a + l; } return a; }; function p(k) { return k || Z.cookiepersistence; } function m(k, n) { return "^" + GaJoin([[n, k[1]].join("."), k[0]], ":"); } //cookie書き込み function writeInCookie(k, n) { //nが""の時は、ブラウザが生きてる間のみ有効 dfvls.a["cookie"] = k + "; path=" + dfvls.cookiepath + "; " + n + cookieworker.getDomainStr(); //cookieworker.fb()はドメインのkey=value; } //domain="hoge.com"の形を返す cookieworker.getDomainStr = function () { //fb return NoVl(dfvls.domainName) ? "" : "domain=" + dfvls.domainName + ";"; }; //k>0で、"expire=????"の形を返す k<0で"" function e(k) { return k > 0 ? g() : ""; } function g() { return h(Z.cookiepersistence); } //expire時間設定 function h(k) { var n = new Date; k = new Date(n.getTime() + k); return "expires=" + k.toGMTString() + "; "; } }; //cookieマネ-ジャ Z.CookieManager = function (f) { var utmaAr, utmbAr, utmcAr, utmzAr, utmxAr, utmvAr, q, cookiemanager = this, //this=e g, //値の真偽性をcheck utmc??を足してハッシュ値を持つ dfvls = f; //cookiemanager.j = new Z.CookieWorker(f); cookieworker = new Z.CookieWorker(f); function AtoS_Bar(a) { //k a = a instanceof Array ? a.join(".") : ""; return NoVl(a) ? "-" : a; } function StoA_Ept(a, d) {//n var l = []; if (!NoVl(a)) { l = a.split("."); if (d) for (a = 0; a < l["length"]; a++) checkOnlyNumSome(l[a]) || (l[a] = "-"); } return l; } //aの文字列を使って、dのドメインハッシュを, 各々のtypeに値をsetする, lは";"とか function setValues(a, d, l) { var t = cookiemanager.M, o, u; for (o = 0; o < t["length"]; o++) { u = t[o][0]; //該当するtype "__utma="とか u += NoVl(d) ? d : d + t[o][4]; //utmaなら、ドメインハッシュを付けるとか t[o][2](Q(a, u, l)); //値をsetする "__utma"に相当する変数とかに } } //真偽性をcheck cookiemanager.verify = function () { return undefined == g || g == cookiemanager.getAllStrToHash(); }; //cookie読み出し cookiemanager.getCookieStr = function () { //k return cookieworker.getCookieStr(); }; //utmx cookiemanager.ma = function () { return utmxAr ? utmxAr : "-"; }; cookiemanager.vb = function (a) { utmxAr = a; }; // cookiemanager.setG = function (a) { //数字".","-"以外のものがなければ、aを数値化、入っていれば"-" g = checkOnlyNumSome(a) ? a * 1 : "-"; }; //utmv cookiemanager.la = function () { return AtoS_Bar(utmvAr); }; cookiemanager.Aa = function (a) { utmvAr = StoA_Ept(a); }; //initDataの中の$.UtmvManagerのtcの中のutmvの処理で呼ばれる //セッション限りのcookieにする cookiemanager.Vb = function () { cookieworker.write("__utmv=", "", -1); //-1はexpireがない }; //utmkを使った真偽check cookiemanager.lc = function () { return g ? g : "-"; }; //cookie書き込み時の"domain=www.hoge.com;"を返す cookiemanager.fb = function () { return NoVl(dfvls.domainName) ? "" : "domain=" + dfvls.domainName + ";"; }; //utma cookiemanager.ja = function () { return AtoS_Bar(utmaAr); }; cookiemanager.tb = function (a) { utmaAr = StoA_Ept(a, 1); }; //utmb cookiemanager.C = function () { return AtoS_Bar(utmbAr); }; cookiemanager.ya = function (a) { utmbAr = StoA_Ept(a, 1); }; //utmc cookiemanager.ka = function () { return AtoS_Bar(utmcAr); }; cookiemanager.ub = function (a) { utmcAr = StoA_Ept(a, 1); }; //utmz cookiemanager.na = function () { return AtoS_Bar(utmzAr); }; cookiemanager.wb = function (a) { utmzAr = StoA_Ept(a); for (a = 0; a < utmzAr["length"]; a++) if (a < 4 && !checkOnlyNumSome(utmzAr[a])) utmzAr[a] = "-" }; //変数qのsetter ,getter cookiemanager.fc = function () { return q; }; cookiemanager.Dc = function (a) { q = a; }; //値のsetをし直す cookiemanager.Sb = function () { utmaAr = []; utmbAr = []; utmcAr = []; utmzAr = []; utmxAr = undefined; utmvAr = []; g = undefined; }; //値の真偽性をcheckする。全部の値を足した数で、ハッシュを作る, P cookiemanager.getAllStrToHash = function () { var a = "", d; for (d = 0; d < cookiemanager.M["length"]; d++) a += cookiemanager.M[d][1](); return GaHash(a); }; //cookie情報があるかどうか、変数gに記憶しておく cookiemanager.setValuesToG = function (a) { var d = cookiemanager.getCookieStr(), l = false; if (d) { setValues(d, a, ";"); cookiemanager.setG(cookiemanager.getAllStrToHash());//gにutm?関連の値を代入しておく l = true; } return l; //cookie情報があれば、true }; //utmkの値を変数gに代入 cookiemanager.setValuesAndG = function (a) { setValues(a, "", "&"); //utm[a-z]の値をset cookiemanager.setG(Q(a, "__utmk=", "&")); //gにutmk=の値を代入しておく }; //すべてのcookie値から cookiemanager.getStrWithK = function () { var a = cookiemanager.M, d = [], l; for (l = 0; l < a["length"]; l++) GaPush(d, a[l][0] + a[l][1]()); GaPush(d, "__utmk=" + cookiemanager.getAllStrToHash()); return d.join("&"); }; //cookiePathCopyから呼ばれる cookiemanager.Nc = function (a, d) { var l = cookiemanager.M, t = dfvls.cookiepath; cookiemanager.setValuesToG(a); dfvls.cookiepath = d; //値が"-"だったら、cookieへの書き込み for (a = 0; a < l["length"]; a++) NoVl(l[a][1]()) || l[a][3](); dfvls.cookiepath = t; }; //cookie書き込みメソッド群 cookiemanager.Cb = function () { cookieworker.write("__utma=", cookiemanager.ja(), Z.cookiepersistence); }; cookiemanager.Ea = function () { cookieworker.write("__utmb=", cookiemanager.C(), dfvls.thirtyminsec * 1000); }; cookiemanager.Db = function () { cookieworker.write("__utmc=", cookiemanager.ka(), 0); }; cookiemanager.Ga = function () { cookieworker.write("__utmz=", cookiemanager.na(), dfvls.sixmonthsec * 1000); }; cookiemanager.Eb = function () { cookieworker.write("__utmx=", cookiemanager.ma(), Z.cookiepersistence); }; cookiemanager.Fa = function () { cookieworker.write("__utmv=", cookiemanager.la(), Z.cookiepersistence); }; cookiemanager.Oc = function () { cookieworker.write(da, cookiemanager.fc(), 0); }; //data保存庫 //"type", "AtoS"(:getter), "StoA"(:setter), "writeInCookie", "なんか" cookiemanager.M = [ ["__utma=", cookiemanager.ja, cookiemanager.tb, cookiemanager.Cb, "."], ["__utmb=", cookiemanager.C, cookiemanager.ya, cookiemanager.Ea, ""], ["__utmc=", cookiemanager.ka, cookiemanager.ub, cookiemanager.Db, ""], ["__utmx=", cookiemanager.ma, cookiemanager.vb, cookiemanager.Eb, ""], ["__utmz=", cookiemanager.na, cookiemanager.wb, cookiemanager.Ga, "."], ["__utmv=", cookiemanager.la, cookiemanager.Aa, cookiemanager.Fa, "."]]; }; //通信オブジェクト Z.Submitter = function (f) { var submitter = this, dfvls = f, //b cookieManager = new Z.CookieManager(dfvls), c = function () {}, //[m]はutmb, trackEvent時に、utmbを更新する UpdateUtmb = function (m) { var q = (new Date).getTime(), e; e = (q - m[3]) * (dfvls.Kc / 1000); if (e >= 1) { m[2] = Math.min(Math.floor(m[2] * 1 + e), dfvls.Pb); m[3] = q; } return m; }; //通信受付Interface submitter.H = function (str, account, domainhash, g, h, k) { //[cookie_value, account-id, domain-hash, bool, bool, ?] //gはtrackTransの時true //hはsendXevent, trackPageviewでsetAutoTrackOutBoundを設定した場合に true var utmbAry, r = dfvls.I, //dfvls.Iはdefault=>1, local, remote server判別用flag n,r location = dfvls.a["location"]; //a cookieManager.setValuesToG(domainhash); utmbAry = GaSplit(cookieManager.C(), "."); //utmbの値をgetして配列化 //n[1]はペ-ジビュ-,500を超える場合は、trackTrans用に限る if (utmbAry[1] < 500 || g) { //g=>false, h=>truetrueなのは、_trackEventの時, outbountの時。 if (h) utmbAry = UpdateUtmb(utmbAry); if (g || !h || utmbAry[2] >= 1) { if (!g && h) utmbAry[2] = utmbAry[2] * 1 - 1; //TrackEvent,OutBoundをcount(decrement)する utmbAry[1] = utmbAry[1] * 1 + 1; //pageviewがcountされた //cookie_valueを追加, baはversion 4.8.9とか str = "?utmwv=" + ba + "&utmn=" + GaRand() + (NoVl(location.hostname) ? "" : "&utmhn=" + GaEncode(location.hostname)) + (dfvls.samplerate == 100 ? "" : "&utmsp=" + GaEncode(dfvls.samplerate)) + str; //local-server-setting if (0 == r || 2 == r) { g = 2 == r ? c : k || c; //送信, dfvls.oaは、setLocalGifPathの値、通常はdfvls.oa => "/__utm.gif"; submitter.$a(dfvls.oa + str, g); } //remote-server-setting 通常パタ-ン if (1 == r || 2 == r) { str = ("https:" == location.protocol ? "https://ssl.google-analytics.com/__utm.gif" : "http://www.google-analytics.com/__utm.gif") + str + "&utmac=" + account + "&utmcc=" + submitter.getUtmccStr(domainhash); if (la) str += "&gaq=1"; //"_gaq"が設定されている場合 ansycrony-tracking submitter.$a(str, k); //送信 kは送信後に実行する関数 } } } cookieManager.ya(utmbAry.join(".")); //utmbの値をset cookieManager.Ea(); //utmbの値を書き込み }; //送信実務担当 submitter.$a = function (m, q) { //q = function(){alert(m);}; my test functioin :) var e = new Image(1, 1); e.src = m; e.onload = function () { e.onload = null; //cはfunction(){}, qはconstructorで指定 //qは,setAutoTrackOutBoundを設定した場合に trackPageviewで Main#daがqになる (q || c)(); }; }; //i.Hから呼ばれる。 mはdomain-hash submitter.getUtmccStr = function (m) { var q = [], e = ["__utma=", "__utmz=", "__utmv=", "__utmx="], g, h = cookieManager.getCookieStr(), //hにcookieに値を代入 k; for (g = 0; g < e["length"]; g++) { k = Q(h, e[g] + m, ";"); //それぞれの値 if (!NoVl(k)) {//utmvについては、"|"を"."にsubstituteする if (e[g] == "__utmv=") { k = GaSplit(k.split(m + ".")[1], "|")[0]; if (NoVl(k)) continue; k = m + "." + k; } GaPush(q, e[g] + k + ";"); } } //"+"で文字列化して返す return GaEncode(q.join("+")); }; }; //Ecommerceマネ-ジャ Z.n = function () { var f = this; f.Y = []; f.hb = function (i) { var b, j = f.Y, c; for (c = 0; c < j.length; c++) b = i == j[c].q ? j[c] : b; return b }; f.Ob = function (i, b, j, c, p, m, q, e) { var g = f.hb(i); if (undefined == g) { g = new Z.n.Mb(i, b, j, c, p, m, q, e); GaPush(f.Y, g) } else { g.Qa = b; g.Ab = j; g.zb = c; g.xb = p; g.Wa = m; g.yb = q; g.Za = e } return g } }; //Ecommerce下請け-デ-タ部門 Z.n.Lb = function (f, i, b, j, c, p) { var m = this; m.Bb = f; m.Ba = i; m.D = b; m.Ua = j; m.pb = c; m.qb = p; m.Ca = function () { return "&" + ["utmt=item", "tid=" + GaEncode(m.Bb), "ipc=" + GaEncode(m.Ba), "ipn=" + GaEncode(m.D), "iva=" + GaEncode(m.Ua), "ipr=" + GaEncode(m.pb), "iqt=" + GaEncode(m.qb)].join("&utm"); }; }; //Ecommerce下請け 制作部門 Z.n.Mb = function (f, i, b, j, c, p, m, q) { var e = this; e.q = f; e.Qa = i; e.Ab = b; e.zb = j; e.xb = c; e.Wa = p; e.yb = m; e.Za = q; e.R = []; e.Nb = function (g, h, k, n, r) { var a = e.gc(g), d = e.q; if (undefined == a) GaPush(e.R, new Z.n.Lb(d, g, h, k, n, r)); else { a.Bb = d; a.Ba = g; a.D = h; a.Ua = k; a.pb = n; a.qb = r } }; e.gc = function (g) { var h, k = e.R, n; for (n = 0; n < k.length; n++) h = g == k[n].Ba ? k[n] : h; return h }; e.Ca = function () { return "&" + ["utmt=tran", "id=" + GaEncode(e.q), "st=" + GaEncode(e.Qa), "to=" + GaEncode(e.Ab), "tx=" + GaEncode(e.zb), "sp=" + GaEncode(e.xb), "ci=" + GaEncode(e.Wa), "rg=" + GaEncode(e.yb), "co=" + GaEncode(e.Za)].join("&utmt"); }; }; //システム・ブラウザデ-タ取得オブジェクト Z.Fb = function (f) { var i = f, b = i.e, j = this, c = "-"; j.V = b.screen; j.Sa = !j.V && b.java ? java.awt.Toolkit.getDefaultToolkit() : undefined; j.d = b.navigator; j.W = c; j.xa = c; j.Va = c; j.qa = c; j.pa = 1; j.eb = c; function p() { var m, q, e; q = "ShockwaveFlash"; var g = "$version", h = j.d ? j.d.plugins : undefined; if (h && h["length"] > 0) for (m = 0; m < h["length"] && !e; m++) { q = h[m]; if (GaIndexOf(q.name, "Shockwave Flash")) e = q.description.split("Shockwave Flash ")[1] } else { q = q + "." + q; try { m = new ActiveXObject(q + ".7"); e = m.GetVariable(g) } catch(k) {} if (!e) try { m = new ActiveXObject(q + ".6"); e = "WIN 6,0,21,0"; m.AllowScriptAccess = "always"; e = m.GetVariable(g) } catch(n) {} if (!e) try { m = new ActiveXObject(q); e = m.GetVariable(g); } catch(r) {} if (e) { e = GaSplit(e.split(" ")[1], ","); e = e[0] + "." + e[1] + " r" + e[2]; } } return e ? e : c } j.bc = function () { var m; if (b.screen) { j.W = j.V.width + "x" + j.V.height; j.xa = j.V.colorDepth + "-bit"; } else if (j.Sa) try { m = j.Sa.getScreenSize(); j.W = m.width + "x" + m.height; } catch(q) {} j.qa = ToLower(j.d && j.d.language ? j.d.language : j.d && j.d.browserLanguage ? j.d.browserLanguage : c); j.pa = j.d && j.d.javaEnabled() ? 1 : 0; j.eb = i.ha ? p() : c; j.Va = GaEncode(i.a.characterSet ? i.a.characterSet : i.a.charset ? i.a.charset : c) }; j.Ic = function () { return "&" + "utm" + ["cs=" + GaEncode(j.Va), "sr=" + j.W, "sc=" + j.xa, "ul=" + j.qa, "je=" + j.pa, "fl=" + GaEncode(j.eb)].join("&utm"); }; j.$b = function () { var m = i.a, q = b.history["length"]; m = j.d.appName + j.d.version + j.qa + j.d.platform + j.d.userAgent + j.pa + j.W + j.xa + (m["cookie"] ? m["cookie"] : "") + (m.referrer ? m.referrer : ""); for (var e = m["length"]; q > 0;) m += q--^e++; return GaHash(m); }; }; //キャンペ-ン処理オブジェクト Z.Cmp = function (f, i, b, j) { //Z.m var dfvls = j, //c = j cmp = this; cmp.c = f; //domain-hash cmp.referer = i; //referrer cmp.timenow = b; //cmp.r //値がなければ、True function isBadStr(g) { return NoVl(g) || "0" == g || !GaIndexOf(g, "://"); } //Path名を返す、パラメ-タは含まない function getQueryPathWithoutParameter(g) { var h = ""; g = ToLower(g.split("://")[1]); if (GaIndexOf(g, "/")) { g = g.split("/")[1]; if (GaIndexOf(g, "?")) h = g.split("?")[0]; } return h; } //host名を返す function getHostName(g) { var h = ""; h = ToLower(g.split("://")[1]); if (GaIndexOf(h, "/")) h = h.split("/")[0]; return h; } //setAndGetDataHolder cmp.setAndGetDataHolder = function (g) { var h = cmp.setOrganic(); //検索エンジンでの値を返す //c.Ja(setCampContentKey), ,,, return new Z.Cmp.DataHolder( Q(g, dfvls.Ka + "=", "&"), //c.Ka => "utm_id" Q(g, dfvls.Na + "=", "&"), //c.Na => "utm_source" Q(g, dfvls.Pa + "=", "&"), //c.Pa => "gclid" cmp.Q(g, dfvls.Ia, "(not set)"), //c.Ia => "utm_campaign" cmp.Q(g, dfvls.La, "(not set)"), //c.La => "utm_medium" cmp.Q(g, dfvls.Oa, h && !NoVl(h.K) ? GaDecode(h.K) : undefined), //c.Oa => "utm_term" cmp.Q(g, dfvls.Ja, undefined)); //c.Ja => "utm_content" }; //Googleカスタム検索か? cmp.isCse = function (g) { //jb var h = getHostName(g), //search?q=hogeなら、search部分を返す k = getQueryPathWithoutParameter(g); if (GaIndexOf(h, "google")) { g = g.split("?").join("&"); //googleのカスタム検索の時はTrue if (GaIndexOf(g, "&" + dfvls.queryparameter + "=")) if (k == dfvls.cse) return true; } //基本はfalse return false; }; //organicでの値があれば、Cmp.DataHolderをsetして返す cmp.setOrganic = function () { //gb var g, h = cmp.referer; var k, n, engines = dfvls.engines; //通常検索 or referralがあれば if (! (isBadStr(h) || cmp.isCse(h))) { //ホストを代入 g = getHostName(h); for (k = 0; k < engines["length"]; k++) { n = engines[k]; //referreに検索エンジンがあれば、 if (GaIndexOf(g, ToLower(n.bb))) { //n.bb => name of the engine h = h.split("?").join("&"); if (GaIndexOf(h, "&" + n.nb + "=")) { //n.nb => parameter g = h.split("&" + n.nb + "=")[1]; if (GaIndexOf(g, "&")) g = g.split("&")[0]; //見つかった時点で、setしたオブジェクトをreturn return new Z.Cmp.DataHolder(x, n.bb, x, "(organic)", "organic", g, x); //n.bbは検索エンジン名, gはキ-ワ-ド } } } } }; cmp.Q = function (g, h, k) { g = Q(g, h + "=", "&"); return k = !NoVl(g) ? GaDecode(g) : !NoVl(k) ? k : "-"; }; //無視する検索ワ-ドに登録されているもの? gは cmp.DataHolder cmp.isIgnoredTerm = function (g) { //uc var h = dfvls.otherengines, k = false, n; if (g && "organic" == g.S) { //g.S="utmc_medium" g = ToLower(GaDecode(g.K)); //g.K="utmc_term" //一致するものがあれば、k=true; for (n = 0; n < h["length"]; n++) k = k || ToLower(h[n]) == g; } return k; }; //cmp.DataHolder cmp.setReferral = function () { //hc var g = "", path = ""; g = cmp.referer; if (! (isBadStr(g) || cmp.isCse(g))) { g = g.split("://")[1]; if (GaIndexOf(g, "/")) { path = GaSubstr(g, g.indexOf("/")); path = path.split("?")[0]; g = ToLower(g.split("/")[0]); } if (0 == g.indexOf("www.")) g = GaSubstr(g, 4); //g => host, path(content)には、referrerのpath(パラメ-タは削除)が入る return new Z.Cmp.DataHolder(x, g, x, "(referral)", "referral", x, path); } }; //document.location.searchを返す setalowlinkerは"#"以下 cmp.getSearchTerm = function (g) {//gは document.location Xb var h = ""; if (dfvls.allowAnchor) { //dfvls.allowAnchor => setAllowAnchor h = g && g.hash ? g.href.substring(g.href.indexOf("#")) : ""; h = "" != h ? h + "&" : h; } h += g.search; return h; }; //直接訪問 cmp.setDirect = function () { return new Z.Cmp.DataHolder( undefined, "(direct)", undefined, "(direct)", "(none)", undefined, undefined ); }; cmp.isIgnoredRef = function (g) { //vc var h = false, k, n = dfvls.ignoredRef; if (g && "referral" == g.S) { g = ToLower(GaEncode(g.X)); for (k = 0; k < n["length"]; k++) h = h || GaIndexOf(g, ToLower(n[k])); } return h; }; //判別、cmp.wにdelegate id, source, gclidのどれかでもあれば、true cmp.L = function (g) { return undefined != g && g.mb(); }; //initDataで呼ばれるもの //return "" or "&utmcn=1" or "&utmcr=1" //arguments g=>"cookiemanager, h=>"isNewVisit?" cmp.cc = function (cookiemanager, newsession) { //?, h var k = "", n = "-", r, a = 0, d, l, domainhash = cmp.c; if (!cookiemanager) return ""; l = cookiemanager.getCookieStr(); //lにcookie値を入れる k = cmp.getSearchTerm(dfvls.a["location"]); //kにはsearch(パラメ-タ)が入る //_linkで遷移してきて、validataに通った場合 if (dfvls.allowLinker && cookiemanager.verify()) { n = cookiemanager.na(); //utmzに関する値が、cookiemanager内変数のutmzArにあるか? //linkで飛んだ先に、既存のcampaignがあれば、return "" if (!NoVl(n) && !GaIndexOf(n, ";")) { //nに値があり、;がきちんとあれば、 cookiemanager.Ga(); //utmzの値をcookieに書き込み return ""; //campaignには関係なしと } } n = Q(l, "__utmz=" + domainhash + ".", ";"); //nには今までのcookieにあるutmzが入る r = cmp.setAndGetDataHolder(k); //rに$.Camp.DataHolderオブジェクトがはいる, kはlocation.searchパラメ-タ //nooverride=1の時 if (cmp.L(r)) { k = Q(k, dfvls.utm_nooverride + "=", "&"); //nooverrideの値を取得 if ("1" == k && !NoVl(n)) return ""; //1で utmzに値があれば、"" } //無視する検索ワ-ドの場合に return "" if (!cmp.L(r)) { //id, source, gclidのどれもない r = cmp.setOrganic(); //new Z.Camp.DataHolder()が入る if (!NoVl(n) && cmp.isIgnoredTerm(r)) return ""; //追加の無視キ-ワ-ドであれば } //新規セッションなら、referrerを調査して、無視する参照元ならreturn "" if (!cmp.L(r) && newsession) { r = cmp.setReferral(); //referralをsetしたcmp.DataHolderが入る if (!NoVl(n) && cmp.isIgnoredRef(r)) return ""; //無視する参照元なら、"" } //新規セッションで、cookieが""なら直接参照をset if (!cmp.L(r)) if (NoVl(n) && newsession) r = cmp.setDirect(); //utmzが空なら、直接参照 //3条件のどれも持たないなら、return "" if (!cmp.L(r)) return ""; //utmzに値があれば、referrerのものと比較 if (!NoVl(n)) { //a [ <domainhash><birth-time><num_of_session><num_of_camp> + csr] a = n.split("."); d = new Z.Cmp.DataHolder; d.setValueFromStr(a.slice(4).join("."));//utmzのutmc値から、dオブジェクトに値をset d = ToLower(d.getStr()) == ToLower(r.getStr()); //dオブジェクトの値を文字列化して、比較 a = a[3] * 1; //aにはキャンペ-ンセッション回数 } if (!d || newsession) {//cookieとreferrerが違うか、newsessionなら //utmaの値を取得 newsession = Q(l, "__utma=" + domainhash + ".", ";"); //最後の"."の場所を取得 l = newsession.lastIndexOf("."); //session回数を取得 l>9にならない場合があるのか? domain-hashが1でも、session-idがあるし? newsession = l > 9 ? GaSubstr(newsession, l + 1) * 1 : 0; a++; //campain-counterを++ //0を1に。他はそのまま newsession = 0 == newsession ? 1 : newsession; //referrerからの値で、cookiemanagerに値をSet cookiemanager.wb([domainhash, cmp.timenow, newsession, a, r.getStr()].join(".")); cookiemanager.Ga(); //書き込み return "&" + "utmcn=1"; } else return "&" + "utmcr=1"; //repeartの場合は、utmzは変更しない }; }; Z.Cmp.DataHolder = function (f, i, b, j, c, p, m) { //Z.m.w //頭の3つ, f, i, bがあれば、キャンペ-ンセッションとなる var cmpq = this; //q cmpq.q = f; //utm_id cmpq.X = i; //utm_source cmpq.ea = b; //gclid cmpq.D = j; //utm_campaign cmpq.S = c; //utm_medium cmpq.K = p; //utm_term cmpq.Xa = m; //utm_content cmpq.getStr = function () { //Da var e = [], g = [ ["cid", cmpq.q], ["csr", cmpq.X], ["gclid", cmpq.ea], ["ccn", cmpq.D], ["cmd", cmpq.S], ["ctr", cmpq.K], ["cct", cmpq.Xa]], h, k; if (cmpq.mb()) for (h = 0; h < g["length"]; h++) if (!NoVl(g[h][1])) { k = g[h][1].split("+").join("%20"); k = k.split(" ").join("%20"); GaPush(e, "utm" + g[h][0] + "=" + k); } return e.join("|"); }; //id,source,gclidが3つともなければ、false, それ以外はtrue cmpq.mb = function () { return ! (NoVl(cmpq.q) && NoVl(cmpq.X) && NoVl(cmpq.ea)); }; //cookieから、パラメ-タを入れる。キャンペ-ン処理で使われる cmpq.setValueFromStr = function (e) { //Zb var g = function (h) { return GaDecode(Q(e, "utm" + h + "=", "|")); }; cmpq.q = g("cid"); cmpq.X = g("csr"); cmpq.ea = g("gclid"); cmpq.D = g("ccn"); cmpq.S = g("cmd"); cmpq.K = g("ctr"); cmpq.Xa = g("cct"); }; }; //utmv管理オブジェクト initDataから呼ばれる Z.UtmvManager = function (f, i, b, j) { //qは初期化オブジェクト, pはドメインハッシュ, c.Oはcookiemanager, eは$.CvManager var utmvmanager = this, domainhash = i, m = "=", dfvls = f, cvmanager = j; //cvmanager utmvmanager.cookiemanager = b; //cookiemanager O utmvmanager.oldsetvar = ""; //sa utmvmanager.data = {}; //値がstoreされる //initDataから呼ばれる utmvmanager.tc = function () { var h; //cookieの値を読んで、domain-hashを見て、utmv値を取り出す("."以降) h = GaSplit(Q(utmvmanager.cookiemanager.getCookieStr(), "__utmv=" + domainhash + ".", ";"), domainhash + ".")[1]; if (!NoVl(h)) { h = h.split("|"); //1, {}, "|" ?? utmvmanager.dataに値がsetされる gの定義は下 // {index: [key,value,scope]}の形 setting(1, utmvmanager.data, h[1]); //旧式のsetvarの値 utmvmanager.oldsetvar = h[0]; //cvmanagerオブジェにset utmvmanager.setInKvoperator(); } }; //実際にcookieにutmvの値を書き込みする //utmvmanager.dataオブジェクトが書き込みされる utmvmanager.setInKvoperator = function () { utmvmanager.clearAndSet(); //値を設定し直す、内部でkvopertorにデ-タをset var h = utmvmanager.oldsetvar, //setvarの代入 k, n, r = ""; //scope-level=>1 "user-level" rに代入 for (k in utmvmanager.data){ if ((n = utmvmanager.data[k]) && 1 === n[2]){ r += k + m + n[0] + m + n[1] + m + 1 + ","; } } //rに値があれば(user-levelがあれば) NoVl(r) || (h += "|" + r); //setvar, user-levelに値がなければ if (NoVl(h)){ //utmvに、値なし期限無しのcookie書き込み, utmvmanager.cookiemanager.Vb(); //あれば }else { //utmvに値をset utmvmanager.cookiemanager.Aa(domainhash + "." + h); //utmvに、実際に、cookie書き込み utmvmanager.cookiemanager.Fa(); } }; //setVar用の設定 utmvmanager.setSetVar = function (h) { utmvmanager.oldsetvar = h; utmvmanager.setInKvoperator(); }; //setCustomVarの設定用 //b._setCustomVarをcallした時は、initData()のあとに、これが呼ばれる //pageTracker内で作られたutmv utmvmanager.setSetCustomVar = function (h, k, n, r) { //[index, name, value, scope] if (1 != r && 2 != r && 3 != r) r = 3; //指定がない場合は3(page-level) var a = false; if (k && n && h > 0 && h <= dfvls.maxSlot) { // dfvls.obは indexの最大値制限 5 k = GaEncode(k); n = GaEncode(n); if (k["length"] + n["length"] <= 64) { utmvmanager.data[h] = [k, n, r]; //{index, [name, value, scope]}というデ-タ構造 utmvmanager.setInKvoperator(); a = true; } } return a; }; //getVisitorCustomVar用 utmvmanager.mc = function (h) { if ((h = utmvmanager.data[h]) && 1 === h[2]) return h[1]; }; utmvmanager.Ub = function (h) { var k = utmvmanager.data; if (k[h]) { delete k[h]; utmvmanager.setInKvoperator(); } }; //utmvの値をclearして、setし直す utmvmanager.clearAndSet = function () { cvmanager._clearKey(8); //"k"が8のvalueをclear cvmanager._clearKey(9); //"k"が9のvalueをclear cvmanager._clearKey(11); //"k"が11のvalueをclear var h = utmvmanager.data, k, n; //転置のイメ-ジ、utmvmanager.dataの長さと同じ長さの配列を作る //cvmanagerにデ-タをsetしていく for (n in h){ if (k = h[n]) { //=に注意、==でない //cvmanager._setKey(8or9or11, index, value)という形 cvmanager._setKey(8, n, k[0]); //nameは8 cvmanager._setKey(9, n, k[1]); //valueは9 //3 != k => user, sessionなら書き込み scopeをset (k = k[2]) && 3 != k && cvmanager._setKey(11, n, "" + k); //scopeは11 } } }; //値のset function setting(h, data, n) { var r; if (!NoVl(n)) { n = n.split(","); for (var a = 0; a < n["length"]; a++) { r = n[a]; if (!NoVl(r)) { r = r.split(m); //m=>"=" if (r["length"] == 4) data[r[0]] = [r[1], r[2], h]; //kに値が入る } } } } }; //key-value操作用 utmv用オジェ、 メインオブジェから呼ばれる //3階層オブジェクトを作り、読む keyは文字列、valueは数字 //Mainオブジェクトのプロパティとして入る Z.CvManager = function () { var cvmanager = this, //f = this i = {}, //メイン-インスタンス-オブジェクト //b = "k", //j = "v", c = ["k", "j"]; //"k", "v" //p = "(", //m = ")", /* q = "*", e = "!", g = "'", h = {}; h[g] = "'0"; h[m] = "'1"; h[q] = "'2"; h[e] = "'3"; */ var k = 1, h = {"'":"'0", ")":"'1", "*":"'2", "!":"'3"}; //Setter function setter(o, u, y, B) { if (undefined == i[o]) i[o] = {}; if (undefined == i[o][u]) i[o][u] = []; i[o][u][y] = B; } //Getter function getter(o, u, y) { return undefined != i[o] && undefined != i[o][u] ? i[o][u][y] : undefined; } //Deleter function deleter(o, u) { if (undefined != i[o] && undefined != i[o][u]) { i[o][u] = undefined; u = true; var y; for (y = 0; y < ["k","v"]["length"]; y++) { if (undefined != i[o][["k","v"][y]]) { u = false; break } } if (u) i[o] = undefined; } } function buildStrByNum(o) { //d var u = "", y = false, B, O; //c => ["k", "v"] for (B = 0; B < c["length"]; B++) { O = o[c[B]]; if (undefined != O) { if (y) u += c[B]; u += l(O); y = false; }else{ y = true; } } return u; } function l(o) { var u = [], y, B; for (B = 0; B < o["length"]; B++) if (undefined != o[B]) { y = ""; if (B != k && undefined == o[B - 1]) y += B.toString() + "!"; y += t(o[B]); GaPush(u, y); } return "(" + u.join("*") + ")"; } function t(o) { var u = "", y, B, O; for (y = 0; y < o["length"]; y++) { B = o.charAt(y); O = h[B]; u += undefined != O ? O : B; } return u; } cvmanager.qc = function (o) { return undefined != i[o]; }; //b.Lc(trackPageview)から呼ばれる,送信用文字列を作成 cvmanager.getCustomVarStr = function () { var o = "", u; for (u in i){ if (undefined != i[u]){ o += u.toString() + buildStrByNum(i[u]); } } return o; }; //b._sendXEventからcallされる,送信文字列作成用 cvmanager.Ac = function (cvmanager_local) { if (cvmanager_local == x) return cvmanager.getCustomVarStr(); //uの例 : "5(category*action)" var u = cvmanager_local.getCustomVarStr(), y; for (y in i){ if (undefined != i[y] && !cvmanager_local.qc(y)){ u += y.toString() + buildStrByNum(i[y]); } } return u; }; //clearAndSetから呼ばれる cvmanager._setKey = function (either_8_9_11, i, name) { if (typeof name != "string") return false; //elementOfUtmvDataは順番i["8"]["k"] = x xが配列でnがインデクサで、nameがvalue setter(either_8_9_11, "k", i, name); return true; }; //真っ当な数字であること cvmanager._setValue = function (o, u, y) { if (typeof y != "number" && (undefined == Number || !(y instanceof Number)) || Math.round(y) != y || y == NaN || y == Infinity) return false; //uは順番 setter(o, "v", u, y.toString()); return true; }; cvmanager._getKey = function (o, u) { return getter(o, "k", u); }; cvmanager._getValue = function (o, u) { return getter(o, "v", u); }; cvmanager._clearKey = function (o) { deleter(o, "k"); //o は 8 or 9 0r 11 }; cvmanager._clearValue = function (o) { deleter(o, "v"); }; }; //End of CvManager //trackEvent用オブジェ Z.Jb = function (f, i) { var b = this; b.Qc = i; b.xc = f; b._trackEvent = function (j, c, p) { return i._trackEvent(b.xc, j, c, p); }; }; Z.Main = function (f, i) { var b = this, submitter = x, dfvls = new Z.DfVls, //c p = false, utmvmanager = undefined; //変数宣言終わり //プロパティ設定 b.e = window; b.time = Math.round((new Date).getTime() / 1000); b.account = f || "UA-XXXXX-X"; b.referrer = dfvls.a.referrer; //b._setReferrerOverrideというAPI?があるが、無視されている? b.ia = undefined; b.f = undefined; b.B = undefined; b.isNewSession = false; //b.F b.A = undefined; b.Ta = ""; //new campaign or not b.cvmanager1 = undefined; //b.g b.cvmanager2 = undefined; //b.cb b.domainhash = undefined; b.cookiemanager = undefined; dfvls.namespace = i ? GaEncode(i) : undefined; //ドメイン名取得、wwwを取る function GaGetDomainName() {// if ("auto" == dfvls.domainName) { var a = dfvls.a.domain; if ("www." == GaSubstr(a, 0, 4)) a = GaSubstr(a, 4); dfvls.domainName = a; } dfvls.domainName = ToLower(dfvls.domainName); } //initData内の通常のペ-ジかどうか判定で使う ,通常-1 function e() { var a = dfvls.domainName, //"auto" "none" "vitual-pagepath" d = a.indexOf("www.google.") * a.indexOf(".google.") * a.indexOf("google."); //c.hは_setCookiePath(デフォルト"/") //通常は、-1が返値 return d || "/" != dfvls.cookiepath || a.indexOf("google.org") > -1; } //utma用配列作成関数 function setUtmaArray(a, d, l) { if (NoVl(a) || NoVl(d) || NoVl(l)) return "-"; b.domainhash = b.GetDomainHash(); //ドメンイハッシュを返す a = Q(a, "__utma=" + b.domainhash + ".", d); if (!NoVl(a)) { a = a.split("."); a[5] = a[5] ? a[5] * 1 + 1 : 1; a[3] = a[4]; a[4] = l; a = a.join("."); } return a; } //protocolがfileでないか、google関連のサイトでないか? function h() { return "file:" != dfvls.a["location"].protocol && e(); } function k(a) { if (!a || "" == a) return ""; for (; ea(a.charAt(0));) a = GaSubstr(a, 1); for (; ea(a.charAt(a["length"] - 1));) a = GaSubstr(a, 0, a["length"] - 1); return a; } function n(a, d, l, t) { if (!NoVl(a())) { d(t ? GaDecode(a()) : a()); GaIndexOf(a(), ";") || l(); } } function r(a) { var d, l = "" != a && dfvls.a["location"].host != a; if (l) for (d = 0; d < dfvls.outbounds["length"]; d++) l = l && GaIndexOf(ToLower(a), ToLower(dfvls.outbounds[d])) == false; // i change from "-1" to "false" return l; } b.wc = function () { var a = false; if (b.B) a = b.B.match(/^[0-9a-z-_.]{10,1200}$/i); return a; }; b.jc = function () { return GaRand() ^ b.A.$b() & 2147483647; }; //ドメインハッシュを返す b.GetDomainHash = function () { if (!dfvls.domainName || "" == dfvls.domainName || "none" == dfvls.domainName) { dfvls.domainName = ""; return 1 } GaGetDomainName(); // dfvls.aにドメイン名を入れる。 return dfvls.Ra ? GaHash(dfvls.domainName) : 1; }; //referrerとdomainを受け取って, b.Yb = function (a, d) { if (NoVl(a)){ a = "-"; }else { //cookiepathを足す d += dfvls.cookiepath && "/" != dfvls.cookiepath ? dfvls.cookiepath : ""; d = a.indexOf(d); //referrerとdomainの一致を探って //a, dが一致しなくて、"[...]"でなければ、referreのまま、"[..."]の場合は "-" //1-9文字までで一致を見たとき、"0" a = d >= 0 && d <= 8 ? "0" : "[" == a.charAt(0) && "]" == a.charAt(a["length"] - 1) ? "-" : a; } return a; //通常はreferrerを返す }; //送信用デ-タを文字列化する b.getSubmittedStr = function (a) { var d = "", l = dfvls.a; d += dfvls.fa ? b.A.Ic() : ""; d += dfvls.da ? b.Ta : ""; //b.Taはキャンペ-ン該当セッションなのかどうか d += dfvls.ga && !NoVl(l.title) ? "&utmdt=" + GaEncode(l.title) : ""; d += "&utmhid=" + GaGlobalCheck() + "&utmr=" + GaEncode(b.ia) + "&utmp=" + GaEncode(b.Bc(a)); return d; }; b.Bc = function (a) { var d = dfvls.a["location"]; return a = undefined != a && "" != a ? GaEncode(a, true) : GaEncode(d.pathname + d.search, true); }; //initDataから呼ばれる, sumitterに仕事を頼む b.Lc = function (a) { if (b.NoSampling()) { var d = ""; if (b.cvmanager1 != undefined && b.cvmanager1.getCustomVarStr()["length"] > 0){ d += "&utme=" + GaEncode(b.cvmanager1.getCustomVarStr()); } d += b.getSubmittedStr(a); submitter.H(d, b.account, b.domainhash); } }; //b._getLinkerUrl内で使用 b.Tb = function () { var cookiemanager = new Z.CookieManager(dfvls); //cookieの全ての値をcookiemanager=>gに入れておく、値があればt, utmkの値を付ける return cookiemanager.setValuesToG(b.domainhash) ? cookiemanager.getStrWithK() : undefined; }; //_link, _linkByPost, b._getLinkerUrl = function (a, d) { var l = a.split("#"), t = a, o = b.Tb(); //oには、utmkの値が付いてくる if (o){ if (d && 1 >= l["length"]){ t += "#" + o; }else if(!d || 1 >= l["length"]){ if (1 >= l["length"]) t += (GaIndexOf(a, "?") ? "&" : "?") + o; }else { t = l[0] + (GaIndexOf(a, "?") ? "&" : "?") + o + "#" + l[1]; } } return t; }; //GASO b.Fc = function () { var a; if (b.wc()) { b.cookiemanager.Dc(b.B); b.cookiemanager.Oc(); Z._gasoDomain = dfvls.domainName; Z._gasoCPath = dfvls.cookiepath; a = dfvls.a.createElement("script"); a.type = "text/javascript"; a.id = "_gasojs"; a.src = "https://www.google.com/analytics/reporting/overlay_js?gaso=" + b.B + "&" + GaRand(); dfvls.a.getElementsByTagName("head")[0].appendChild(a); } }; //セッションに関する処理を行う b.pc = function () { var timenow = b.time, //現在時間がb.timeに入っている cookiemanager = b.cookiemanager, //CookiManagerオブジェクト d cookievalue = cookiemanager.getCookieStr(), //cookieの値を取得 l domainhash = b.domainhash + "", //t=b.domainhash ドメインハッシュ "none"なら1 o = dfvls.e, //dfvlsは初期値格納オブジェ、.eはwindowsオブジェになっている u = o ? o.gaGlobal : undefined, //たぶん、そのままwindowsオブジェクト y, //アンカ-で"#"を指定した場合に、アンカ-以下のURIが入ってくる B = GaIndexOf(cookievalue, "__utma=" + domainhash + "."), //_utmaある? O = GaIndexOf(cookievalue, "__utmb=" + domainhash), //_utmbある? ma = GaIndexOf(cookievalue, "__utmc=" + domainhash), // _utmcある? G, //_utmaの値を格納 J = [], //_utmbの値を配列で格納 S = "", //y+"&" ha = false; //gaGlobalの判別flag(ドメインハッシュが一致しない場合はtrue) //b.pcの内部変数宣言終わり //"-"とかを""にする cookievalue = NoVl(cookievalue) ? "" : cookievalue; //c.allowLinkerはsetAllowLinker(true)で1 //urlから値を取得、この時に、utmkがハッシュでの改ざんcheckになる if (dfvls.allowLinker) { y = dfvls.a["location"] && dfvls.a["location"].hash ? dfvls.a["location"].href.substring(dfvls.a["location"].href.indexOf("#")) : ""; //b.setAllowAnchorで設定, anchorでの文字列があれば、Sに代入 if (dfvls.allowAnchor && !NoVl(y)) S = y + "&"; //search部分も引っ付ける S += dfvls.a["location"].search; //Sに_utmaが含まれれば if (!NoVl(S) && GaIndexOf(S, "__utma=")) { cookiemanager.setValuesAndG(S); //Sの値をcookieに入れて、utmk値をGにSet //verifyで、gが未設定か、urlの値がきちんとcookieに入ったかをHashでcheck //失敗なら、gはundefinedに、utmA..Z設定用変数の中身もclear cookiemanager.verify() || cookiemanager.Sb(); G = cookiemanager.ja(); //_utma設定用変数から値をGに Sb()を実行した場合には、G="-"となる } //utmxのsetter, getter, cookiewriter, true(Decodeする) //utmx をcookieに書き込み n(cookiemanager.ma, cookiemanager.vb, cookiemanager.Eb, true); //utmv をcookieに書き込み n(cookiemanager.la, cookiemanager.Aa, cookiemanager.Fa); } //以上でAllowLinkerがtrueの時の作業終わり //通常(linkでない)の場合と、上記でutmaがなかった場合 if (NoVl(G)){ //Bは、domainHashに対応したutmaのcheck-flag if (B){ //utmb, utmcが無い場合、新規セッション if (!O || !ma) { //utmaの値を現在時間で更新して代入 G = setUtmaArray(cookievalue, ";", timenow); //b.isNewSessionは、キャンペ-ン処理での新規セッション判定に使われる b.isNewSession = true; //継続セッションの場合 } else { //utmaの値を取得 G = Q(cookievalue, "__utma=" + domainhash + ".", ";"); //utmbをset, 配列にいれておく J = GaSplit(Q(cookievalue, "__utmb=" + domainhash, ";"), "."); } //utmaのドメインハッシュが一致しない }else { //新規にutma用の配列を作る G = GaJoin([domainhash, b.jc(), timenow, timenow, timenow, 1], "."); //新規セッションflag ha = b.isNewSession = true; //haはGaGlobalで使う } //utmaがあるけど、utmb or utmcがない=>新規セッション }else if (NoVl(cookiemanager.C()) || NoVl(cookiemanager.ka())) { //utmb, utmcのどちらかが、"-"だったとき //値を現在時間で更新してGに入れる G = setUtmaArray(S, "&", timenow); //新規セッションflagをtrueに b.isNewSession = true; //utma, utmb, utmcあり } else { //utmbをset J = GaSplit(cookiemanager.C(), "."); //utmbの先頭要素がドメインハッシュに? domainhash = J[0]; } //G(utma), J(utmb)の設定終わり G = G.split("."); //gaGlobalがある時 if (o && u && u.dh == domainhash && !dfvls.namespace) { G[4] = u.sid ? u.sid : G[4]; if (ha) { G[3] = u.sid ? u.sid : G[4]; if (u.vid) { timenow = u.vid.split("."); //from string to array G[1] = timenow[0]; G[2] = timenow[1]; } } } //utmaの値を、クッキ-マネ-ジャ-オブジェクトにset cookiemanager.tb(G.join(".")); //utmbをsetしていく J[0] = domainhash; J[1] = J[1] ? J[1] : 0; J[2] = undefined != J[2] ? J[2] : dfvls.Jc; //dfvls.Jc = 10 J[3] = J[3] ? J[3] : G[4]; //session開始時間 //utmbをset cookiemanager.ya(J.join(".")); //utmcをset cookiemanager.ub(domainhash); //クッキ-マネ-ジャ-オブジェクトの変数gがなければ、 //cookiemanager.setG(cookiemanager.getAllStr())でutmkの値を入れる NoVl(cookiemanager.lc()) || cookiemanager.setG(cookiemanager.getAllStrToHash()); //utmaをcookieに書き込み cookiemanager.Cb(); //utmbをcookieに書き込み cookiemanager.Ea(); //utmcをcookieに書き込み cookiemanager.Db(); }; //End of b.pc() //通信用オブジェクトZ.Submitterを呼び、submitterに代入 b.rc = function () { submitter = new Z.Submitter(dfvls); }; //INITDATA b._initData = function () { var cmpmanager; //pは、このメインオブジェの変数、デフォでfalse if (!p) { if (!b.A) { //システム・ブラウザ情報取得 b.A = new Z.Fb(dfvls); b.A.bc(); } b.domainhash = b.GetDomainHash(); //ドメインハッシュを求めて、 b.cookiemanager = new Z.CookieManager(dfvls); //cookie管理オブジェを作って b.cvmanager1 = new Z.CvManager; //utmv下請け処理オブジェを作って utmvmanager = new Z.UtmvManager(dfvls, b.domainhash, b.cookiemanager, b.cvmanager1); //utmvの処理オブジェを作る m= //通信用オブジェクトを呼び、変数submitterに代入 b.rc(); } if (h()) { b.pc(); //セッション管理処理,utma,utmb,utmc utmvmanager.tc(); //utmvの処理を行う } if (!p) { if (h()) { b.ia = b.Yb(b.referrer, dfvls.a.domain); //referrerとdomain名を渡す,通常はreferreが戻る if (dfvls.da) { //[domain-hash, referrer, TimeNow, dfvls] cmpmanager = new Z.Cmp(b.domainhash, b.ia, b.time, dfvls); //キャンペ-ン処理を行う。"", "utmcr=1", "utmcn=1" b.Ta = cmpmanager.cc(b.cookiemanager, b.isNewSession); } } b.cvmanager2 = new Z.CvManager; //trackEvent用オブジェの作成しておく p = true; //重複処理を避ける為 } //b.scはGASO処理、Z.ibはGaso処理後にtrueに Z.ib || b.sc(); }; //utmbaのvisit(セッション)固有の番号を返す <domain-hash><これ><time><time><time><num> b._visitCode = function () { b._initData(); var a = Q(b.cookiemanager.getCookieStr(), "__utma=" + b.domainhash + ".", ";"); a = a.split("."); return a["length"] < 4 ? "" : a[1]; }; b._cookiePathCopy = function (a) { b._initData(); b.cookiemanager && b.cookiemanager.Nc(b.domainhash, a); }; b.sc = function () { var a = dfvls.a["location"].hash; //#パラメ-タが#の時。"#hell if (a && 1 == a.indexOf("gaso=")) a = Q(a, "gaso=", "&"); else a = (a = dfvls.e.name) && 0 <= a.indexOf("gaso=") ? Q(a, "gaso=", "&") : Q(b.cookiemanager.getCookieStr(), da, ";"); if (a["length"] >= 10) { b.B = a; b.Fc(); } Z.ib = true; }; b.NoSampling = function () { //b.J getVisitCode return b._visitCode() % 10000 < dfvls.samplerate * 100; }; //Outbound用 trackPageview内で呼ばれる b.Gc = function () { var a, d, l = dfvls.a.links; //lにリンクをあつめる //自ドメインをoutboundに入れる if (!dfvls.lb) { //lbはsebdomain用のoutbound設定 a = dfvls.a.domain; if ("www." == GaSubstr(a, 0, 4)) a = GaSubstr(a, 4); dfvls.outbounds.push("." + a); } //dfvls.hrefexaminlimitのdefaultは1000 for (a = 0; a < l["length"] && (dfvls.hrefexaminlimit == -1 || a < dfvls.hrefexaminlimit); a++) { d = l[a]; if (r(d.host)){ if (!d.gatcOnclick) { d.gatcOnclick = d.onclick ? d.onclick : b.yc; d.onclick = function (t) { var o = !this.target || this.target == "_self" || this.target == "_top" || this.target == "_parent"; o = o && !b.Rb(t); //b.Rb(t)で、shitt,alt,ctrlが押されたかcheck b.Mc(t, this, o); //送信を行う return o ? false : this.gatcOnclick ? this.gatcOnclick(t) : true; }; }; } } }; //onclickが定義されてない時に、使う関数 b.yc = function (){}; // {/a/[-1]=='a' && alert(b);}; firefoxなら、console.logが使える b._trackPageview = function (a) { if (h()) { b._initData(); //dfvls.outbounds = [];//WWWWWWW delete it // domが構築された後でないとだめ? b._setAutoTrackOutboundが有効な場合 dfvls.outbounds && b.Gc(); //debugger; b.Lc(a); //submitterを使う b.isNewSession = false; //falseにして、新規セッションが終了したとさせる } }; b._trackTrans = function () { var a = b.domainhash, d = [], l, t, o; b._initData(); if (b.f && b.NoSampling()) { for (l = 0; l < b.f.Y["length"]; l++) { t = b.f.Y[l]; GaPush(d, t.Ca()); for (o = 0; o < t.R["length"]; o++) GaPush(d, t.R[o].Ca()); } for (l = 0; l < d["length"]; l++) submitter.H(d[l], b.account, a, true); } }; b._setTrans = function () { var a = dfvls.a, d, l, t; a = a.getElementById ? a.getElementById("utmtrans") : a.utmform && a.utmform.utmtrans ? a.utmform.utmtrans : undefined; b.initData(); if (a && a.value) { b.f = new Z.n; t = a.value.split("UTM:"); dfvls.v = !dfvls.v || "" == dfvls.v ? "|" : dfvls.v; for (a = 0; a < t["length"]; a++) { t[a] = k(t[a]); d = t[a].split(dfvls.v); for (l = 0; l < d["length"]; l++) d[l] = k(d[l]); if ("T" == d[0]) b._addTrans(d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8]); else "I" == d[0] && b._addItem(d[1], d[2], d[3], d[4], d[5], d[6]) } } }; b._addTrans = function (a, d, l, t, o, u, y, B) { b.f = b.f ? b.f : new Z.n; return b.f.Ob(a, d, l, t, o, u, y, B) }; b._addItem = function (a, d, l, t, o, u) { var y; b.f = b.f ? b.f : new Z.n; (y = b.f.hb(a)) || (y = b._addTrans(a, "", "", "", "", "", "", "")); y.Nb(d, l, t, o, u) }; b._setVar = function (a) { if (a && "" != a && e()) { b._initData(); utmvmanager.setSetVar(GaEncode(a)); b.NoSampling() && submitter.H("&utmt=var", b.account, b.domainhash) } }; //a=>slot, d=>name, l=>value, t=>scope b._setCustomVar = function (a, d, l, t) { b._initData(); return utmvmanager.setSetCustomVar(a, d, l, t); }; //aはslot番号 b._deleteCustomVar = function (a) { b._initData(); utmvmanager.Ub(a); }; //aはslot番号 b._getVisitorCustomVar = function (a) { b._initData(); return utmvmanager.mc(a); }; //通常は5だが、、 b._setMaxCustomVariables = function (a) { dfvls.maxSlot = a; }; b._link = function (a, d) { if (dfvls.allowLinker && a) { b._initData(); dfvls.a["location"].href = b._getLinkerUrl(a, d); } }; b._linkByPost = function (a, d) { if (dfvls.allowLinker && a && a.action) { b._initData(); a.action = b._getLinkerUrl(a.action, d); } }; //aは[5689(11)], dは[1-5], lはvalue b._setXKey = function (a, d, l) { b.cvmanager1._setKey(a, d, l); }; //使い方不明 b._setXValue = function (a, d, l) { b.cvmanager1._setValue(a, d, l); }; //aは[5689(11)], dは[1-5] b._getXKey = function (a, d) { return b.cvmanager1._getKey(a, d); }; b._getXValue = function (a, d) { return b.cvmanager1._getValue(a, d); }; b._clearXKey = function (a) { b.cvmanager1._clearKey(a); }; b._clearXValue = function (a) { b.cvmanager1._clearValue(a); }; b._createXObj = function () { b._initData(); return new Z.CvManager(); }; b._sendXEvent = function (a) { var d = ""; b._initData(); if (b.NoSampling()) { d += "&utmt=event&utme=" + GaEncode(b.cvmanager1.Ac(a)) + b.getSubmittedStr(); submitter.H(d, b.account, b.domainhash, false, true); } }; b._createEventTracker = function (a) { b._initData(); return new Z.Jb(a, b) }; //[category, action, opt_label, opt_value] b._trackEvent = function (a, d, l, t) { var o = b.cvmanager2; //initDataの時に、設定された CvManager オブジェクト if (undefined != a && undefined != d && "" != a && "" != d) { o._clearKey(5); o._clearValue(5); ( a = o._setKey(5, 1, a) && o._setKey(5, 2, d) && (undefined == l || o._setKey(5, 3, l)) && (undefined == t || o._setValue(5, 1, t)) ) && b._sendXEvent(o); }else{ a = false; } return a; }; //OutBound用,送信処理 //a=>event, d=>dom, l=>遷移するかどうか b.Mc = function (a, d, l) { b._initData(); if (b.NoSampling()) { var localCvManager = new Z.CvManager; localCvManager._setKey(6, 1, d.href); var o = l ? function () {b.db(a, d);} : undefined; //b.dbは遷移処理 //false, true の引数は、trackEventではなく、outBoundを示す。oは送信後実行関数 submitter.H("&utmt=event&utme=" + GaEncode(localCvManager.getCustomVarStr()) + b.getSubmittedStr(), b.account, b.domainhash, false, true, o); if (l) { var u = this; dfvls.e.setTimeout(function () { u.db(a, d); //遷移処理 }, //この話は以下を参考、http://www.google.com/support/forum/p/Google+Analytics/thread?tid=3dfa688533e09141&hl=en 500); } } }; //OutBound用 処理をした後に、遷移させる call from b.MC //遷移処理する関数は、上のdfvls.e.setTimeoutもあるが、b.dbがfront runner //a => event, d => dom b.db = function (a, d) { if (!a) a = dfvls.e.event; var l = true; if (d.gatcOnclick) l = d.gatcOnclick(a); if (l || typeof l == "undefined") if (!d.target || d.target == "_self") dfvls.e["location"] = d.href; else if (d.target == "_top") dfvls.e.top.document["location"] = d.href; else if (d.target == "_parent") dfvls.e.parent.document["location"] = d.href; }; //shift, alt, ctrlが押されたかcheck OutBound用 call from b.Gc b.Rb = function (a) { if (!a) a = dfvls.e.event; var d = a.shiftKey || a.ctrlKey || a.altKey; if (!d){ if (a.modifiers && dfvls.e.Event){ d = a.modifiers & dfvls.e.Event.CONTROL_MASK || a.modifiers & dfvls.e.Event.SHIFT_MASK || a.modifiers & dfvls.e.Event.ALT_MASK; } } return d; }; b.Pc = function () { return dfvls }; b._setDomainName = function (a) { dfvls.domainName = a }; b._addOrganic = function (a, d, l) { dfvls.engines.splice(l ? 0 : dfvls.engines.length, 0, new Z.Ha(a, d)) }; b._clearOrganic = function () { dfvls.engines = [] }; b._addIgnoredOrganic = function (a) { GaPush(dfvls.otherengines, a) }; b._clearIgnoredOrganic = function () { dfvls.otherengines = []; }; b._addIgnoredRef = function (a) { GaPush(dfvls.ignoredRef, a) }; b._clearIgnoredRef = function () { dfvls.ignoredRef = [] }; b._setAllowHash = function (a) { dfvls.Ra = a ? 1 : 0 }; b._setCampaignTrack = function (a) { dfvls.da = a ? 1 : 0 }; b._setClientInfo = function (a) { dfvls.fa = a ? 1 : 0 }; b._getClientInfo = function () { return dfvls.fa }; b._setCookiePath = function (a) { dfvls.cookiepath = a }; b._setTransactionDelim = function (a) { dfvls.v = a }; b._setCookieTimeout = function (a) { dfvls.sixmonthsec = a }; b._setDetectFlash = function (a) { dfvls.ha = a ? 1 : 0 }; b._getDetectFlash = function () { return dfvls.ha }; b._setDetectTitle = function (a) { dfvls.ga = a ? 1 : 0 }; b._getDetectTitle = function () { return dfvls.ga }; b._setLocalGifPath = function (a) { dfvls.oa = a }; b._getLocalGifPath = function () { return dfvls.oa }; b._setLocalServerMode = function () { dfvls.I = 0 }; b._setRemoteServerMode = function () { dfvls.I = 1 }; b._setLocalRemoteServerMode = function () { dfvls.I = 2 }; b._getServiceMode = function () { return dfvls.I }; b._setSampleRate = function (a) { dfvls.samplerate = a; }; b._setSessionTimeout = function (a) { dfvls.thirtyminsec = a }; b._setAllowLinker = function (a) { dfvls.allowLinker = a ? 1 : 0 }; b._setAllowAnchor = function (a) { dfvls.alloAnchor = a ? 1 : 0 }; b._setCampNameKey = function (a) { dfvls.Ia = a; }; b._setCampContentKey = function (a) { dfvls.Ja = a; }; b._setCampIdKey = function (a) { dfvls.Ka = a; }; b._setCampMediumKey = function (a) { dfvls.La = a; }; b._setCampNOKey = function (a) { dfvls.utm_nooverride = a; }; b._setCampSourceKey = function (a) { dfvls.Na = a }; b._setCampTermKey = function (a) { dfvls.Oa = a }; b._setCampCIdKey = function (a) { dfvls.Pa = a }; b._getAccount = function () { return b.account; }; b._setAccount = function (a) { b.account = a }; b._setNamespace = function (a) { dfvls.namespace = a ? GaEncode(a) : x }; b._getVersion = function () { return ba; }; // 外部リンクを計測する、引数には計測しないドメインを配列の形で b._setAutoTrackOutbound = function (a) { dfvls.outbounds = []; if (a) dfvls.outbounds = a; }; b._setTrackOutboundSubdomains = function (a) { dfvls.lb = a; }; //defaultは1000 b._setHrefExamineLimit = function (a) { dfvls.hrefexaminlimit = a; }; b._setReferrerOverride = function (a) { b.referrer = a; }; b._setCookiePersistence = function (a) { Z.cookiepersistence = a; //utma, utmx, utmv }; }; Z._getTracker = function (f, i) { return new Z.Main(f, i) }; var $ = { ca: {}, _createAsyncTracker: function (f, i) { i = i || ""; f = new Z.Main(f); return $.ca[i] = f; }, _getAsyncTracker: function (f) { f = f || ""; var i = $.ca[f]; if (!i) { i = new Zx.Main; $.ca[f] = i; } return i; }, // 配列の要素を、pageTrackerオブジェクトのメソッドで実行、関数オブジェの場合はそれを実行 push: function () { for (var f = arguments, i = 0, b = 0; b < f["length"]; b++) try { if (typeof f[b] === "function"){ f[b](); }else { var j = "", c = f[b][0], p = c.lastIndexOf("."); if (p > 0) { j = GaSubstr(dfvls, 0, p); c = GaSubstr(dfvls, p + 1); } var m = $._getAsyncTracker(j); m[c].apply(m, f[b].slice(1)); } } catch(q) { i++ } return i; } }; window["_gat"] = Z; var la = window["_gaq"]; function na() { var f = window["_gaq"], i = false; if (f && typeof f.push == "function") { i = f.constructor == Array; if (!i) return } window["_gaq"] = $; i && $.push.apply($, f); } na(); })(); |
z_API >