1/** 2 * ek-tracker tracker js v1 3 * 4 * ek-tracker apiã®å¼ã³åºããè¡ã 5 * ES5 + XMLHttpRequest ã§å®è£ ããã¦ãããjQueryãªã©å¤é¨ã©ã¤ãã©ãªä¾åãªãå©ç¨å¯è½ 6 * 7 * Google gtag.jsãåèã«gtag颿°ã®ä»£ããã«ekTrackerTag颿°ãå®ç¾©ãã¦ãã 8 * 9 * 1. åæåå 10 * é åããã¥ã¼ã¨ãã¦æ±ããekTrackerTagå¼ã³åºããekTracker.pushã§ãã¥ã¼è¿½å ãè¡ã 11 * 12 * 2. åæå 13 * éåæ(script async屿§)ã§ ek-tracker-v1.js ãå®è¡ãã 14 * ãã¥ã¼å ã®åæåãã©ã¡ã¼ã¿ãå©ç¨ãã¦åæåãè¡ãã 15 * ããã¾ã§ã«è¿½å ããã¦ãããã¥ã¼ã®ã¤ãã³ããå¦çãã 16 * ãã¥ã¼ã®push颿°ã䏿¸ããã峿ã¤ãã³ãå¦çãè¡ããããã«ãã 17 * 18 * 3. åæåå¾ 19 * ekTrackerTagå¼ã³åºããekTracker.pushã¿ã¤ãã³ã°ã§å³æã¤ãã³ãå¦çãè¡ããã 20 * 21 * å©ç¨æ¹æ³: 22 * headã¿ã°ã«ä»¥ä¸ã追å ãã 23 * 24 * ```html 25 * <script> 26 * window.ekTracker = window.ekTracker || []; 27 * function ekTrackerTag() { 28 * ekTracker.push(arguments); 29 * } 30 * ekTrackerTag('initialize', { 31 * appId: 'å¿ é ', 32 * lkey: 'å¿ é ', // ãµã¼ãã¼ãµã¤ãã§çæãã 33 * // å¿ è¦ã«å¿ãã¦æå® 34 * // baseUrl: 'https://localhost:8080', 35 * // debug: true, // ãã°åºå 36 * // ãã©ããã³ã°ãã¼ã¿ãããªã»ãããããå ´å 37 * // trans_id: 'xxxx', 38 * // kiseki: 'wwwww', 39 * // svgid: 'transit', 40 * }); 41 * </script> 42 * <script src="https://ek-tracker.ekitan.com/tracker/static/js/ek-tracker-v1.js" async></script> 43 * 44 * // ã¤ã³ãã¬ãã·ã§ã³è¨æ¸¬ 45 * <script> 46 * ekTrackerTag('track', {event_type: 'imp', kiseki: 'xxxx'}); 47 * </script> 48 * 49 * // ã¯ãªãã¯è¨æ¸¬ 50 * <a href="https://ekitan.com/" onclick="ekTrackerTag('track', {event_type: 'clk', kiseki: 'xxxx'})">ekitan</a> 51 * 52 * <button class="btn">test</button> 53 * 54 * <script> 55 * $('.btn').on('click', function () { 56 * ekTrackerTag('track', {event_type: 'clk', kiseki: 'xxxx'}) 57 * }); 58 * </script> 59 * ``` 60 */ 61(function (window) { 62 /** 63 * åæåãã©ã¡ã¼ã¿ 64 * 65 * @typedef {Object} Settings 66 * @property {string} [baseUrl] APIã¨ã³ããã¤ã³ã 67 * @property {boolean} [debug] ãããã°ãã©ã° 68 * @property {string} appId ã¢ããªID (X-Ekitan-Auth-App-Id ãããã¼) 69 * @property {string} lkey èªè¨¼ãã¼ (X-Ekitan-Auth-Lkey) 70 */ 71 72 /** 73 * track, tracksã§ãã©ããã³ã°ãããã©ã¡ã¼ã¿ 74 * 75 * @typedef {Object} TrackingData 76 * @property {number} [payment] 77 * @property {string} [eid] 78 * @property {string} [aid] 79 * @property {string} [trans_id] 80 * @property {string} event_type 81 * @property {string} [event_id] 82 * @property {string} kiseki 83 * @property {string} [frame_id] 84 * @property {string} [banner_id] 85 * @property {string} [svid] 86 * @property {string} [svgid] 87 * @property {Array} [tags] 88 * @property {string} [cust1_n] 89 * @property {string} [cust1_v] 90 * @property {string} [cust2_n] 91 * @property {string} [cust2_v] 92 * @property {string} [cust3_n] 93 * @property {string} [cust3_v] 94 * @property {string} [cust4_n] 95 * @property {string} [cust4_v] 96 * @property {string} [cust5_n] 97 * @property {string} [cust5_v] 98 * @property {string} [ab_test_id] 99 * @property {string} [ab_test_variant] 100 */ 101 102 /** 103 * åæåãã©ã¡ã¼ã¿ + ãã©ããã³ã°ãã¼ã¿ããªã»ããå¤ 104 * svgid, trans_idãªã©ç»é¢å ã§å ±éã®ãã©ããã³ã°ãã©ã¡ã¼ã¿ãåæåæã«æå®ã§ãã 105 * 106 * @typedef {Settings & Partial<TrackingData>} FullSettings 107 */ 108 109 /** 110 * ã°ãã¼ãã«ãªEkTrackerã®åå®ç¾© 111 * 112 * @type {Array} 113 */ 114 window.ekTracker = window.ekTracker || []; 115 var trackerInstance = null; 116 var debug = false; 117 118 var handleArgs = function (args) { 119 if (Object.prototype.toString.call(args) === "[object Arguments]") { 120 if (trackerInstance[args[0]]) { 121 var argsArray = Array.prototype.slice.call(args); 122 trackerInstance[args[0]].apply(trackerInstance, argsArray.slice(1)); 123 return; 124 } else { 125 debug && console.error("Invalid method: ", args[0]); 126 } 127 } 128 debug && console.error("Invalid arguments: ", args); 129 }; 130 131 var createTrackerHandler = function () { 132 var baseUrl = "https://ek-tracker.ekitan.com"; 133 var appId; 134 var lkey; 135 var isInitialized = false;
136 var presetSettings = {}; 137 138 var allowedFields = [ 139 "payment", 140 "eid", 141 "aid", 142 "trans_id", 143 "event_type", 144 "event_id", 145 "kiseki", 146 "frame_id", 147 "banner_id", 148 "svid", 149 "svgid", 150 "tags", 151 "cust1_n", 152 "cust1_v", 153 "cust2_n", 154 "cust2_v", 155 "cust3_n", 156 "cust3_v", 157 "cust4_n", 158 "cust4_v", 159 "cust5_n", 160 "cust5_v", 161 "ab_test_id", 162 "ab_test_variant" 163 ]; 164 165 // åæåå¾ã¯pushæã«å³æã¤ãã³ãå¦çãè¡ãããã« 166 window.ekTracker.push = function (args) { 167 debug && console.log("Processing pushed arguments:", args); 168 handleArgs(args); 169 }; 170 171 /** 172 * @param {FullSettings} settings 173 */ 174 var initialize = function (settings) { 175 baseUrl = settings.baseUrl || baseUrl; 176 debug = settings.debug || false; 177 178 if (!settings.appId || !settings.lkey) { 179 debug && console.error("Required configuration 'appId' and 'lkey' are missing") 180 } 181 appId = settings.appId; 182 lkey = settings.lkey; 183 184 presetSettings = allowedFields.reduce(function (result, key) { 185 if (settings[key] != null) { 186 result[key] = settings[key]; 187 } 188 return result; 189 }, {}); 190 debug && console.log("presetSettings: ", presetSettings) 191 isInitialized = true; 192 }; 193 194 /** 195 * @param {Array<TrackingData>} data 196 */ 197 var tracks = function (data) { 198 if (!isInitialized) { 199 debug && console.error("Not initialized"); 200 return; 201 } 202 203 var payload = []; 204 for (var i = 0; i < data.length; i++) { 205 // presetSettingsããã¼ã¸ 206 var item = data[i]; 207 payload.push((function () { 208 var merged = {}; 209 var key; 210 for (key in presetSettings) { 211 if (presetSettings.hasOwnProperty(key)) { 212 merged[key] = presetSettings[key]; 213 } 214 } 215 for (key in item) { 216 if (item.hasOwnProperty(key)) { 217 merged[key] = item[key]; 218 } 219 } 220 return merged; 221 })()); 222 } 223 224 debug && console.info("Request tracks: ", payload); 225 226 // ãã©ããã³ã°ãã¼ã¿ãéä¿¡ 227 var xhr = new XMLHttpRequest(); 228 xhr.open("POST", baseUrl + "/tracker/tracks", true); 229 xhr.setRequestHeader("Content-Type", "application/json"); 230 xhr.setRequestHeader("X-Ekitan-Auth-App-Id", appId); 231 xhr.setRequestHeader("X-Ekitan-Auth-Lkey", lkey); 232 233 xhr.onreadystatechange = function () { 234 if (xhr.readyState === 4) { // å®äº 235 if (xhr.status >= 200 && xhr.status < 300) { 236 var jsonResponse = JSON.parse(xhr.responseText); 237 debug && console.info("Response tracks: ", jsonResponse); 238 } else { 239 debug && console.error("Error: ", xhr.statusText); 240 } 241 } 242 }; 243 244 xhr.onerror = function () { 245 debug && console.error("Error: ", xhr.statusText); 246 }; 247 248 xhr.send(JSON.stringify(payload)); 249 }; 250 251 /** 252 * @param {TrackingData} data 253 */ 254 var track = function (data) { 255 tracks([data]); 256 }; 257 258 debug && console.log("trackerInstance initialized: ", trackerInstance); 259 260 return {initialize: initialize, track: track, tracks: tracks}; 261 }; 262 263 // ãã¥ã¼ãå¦çãã颿° 264 var processQueue = function () { 265 if (!trackerInstance) { 266 // ååã®ã¿ã¤ã³ã¹ã¿ã³ã¹çæ 267 trackerInstance = createTrackerHandler(); 268 } 269 while (window.ekTracker.length > 0) { 270 handleArgs(window.ekTracker.shift()); 271 } 272 }; 273 274 processQueue(); 275})(window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.