astec-consumer.motenasu.biz Open in urlscan Pro
133.223.66.41  Public Scan

URL: https://astec-consumer.motenasu.biz/scripts/jquery.unknown.marketing.js
Submission: On February 03 via manual from IN — Scanned from JP

Form analysis 0 forms found in the DOM

Text Content

/**
 * @var 各種パラメータの取得用配列
 */
var params = {};

/**
 * @var MOTENASUリード特定用のトークン
 */
var loginkey = null;

/**
 * @var URLの取得
 */
params.requestUrl = location.href;

/**
 * @var COOKIEパラメータ名
 */
params.cookieName = "mt_uid";

/**
 * @var クッキー有効期限
 */
params.maxage = 63072000; // 2å¹´

/**
 * @var 呼び出し側で設定された変数
 */
params.opt = window._motenasuOpt;

/**
 * @var 呼び出し側で設定されたセグメント変数
 */
params.segment = window._motenasuSegment;

/**
 * @var 通信プロトコル
 */
params.protocol = /^https/.test(params.opt.siteDomain) ? "https" : "http";

/**
 * @var ホスト名
 */
params.hostname = window.location.hostname;

/**
 * @var 訪問時間
 */
var startTime = 0;

/**
 * @var 離脱時間
 */
var endTime = 0;

/**
 * @var 匿名顧客ID
 */
var uuid = null;

/**
 * @var 履歴ID
 */
var historyId = null;

/**
 * @var 同期ステータスフラグ
 */
var isAsync = true;

/**
 * @var ユーザエージェント
 */
var ua = window.navigator.userAgent;


// 訪問時間を記録
startTime = (new Date()).getTime();

// loginkeyの取得
var matches = location.href.match(/loginkey\=([0-9a-zA-Z]+)/);
if(matches !== null)
	loginkey = matches[1];

// COOKIEの取得
var cookies = document.cookie;
var cookiesArray = cookies.split(';');
var cookieValue;
for(var i = 0; i < cookiesArray.length; i++){	
    var cArray = cookiesArray[i].split('=');
    if(cArray[0].trim() == params.cookieName){
    	cookieValue = cArray[1].trim();
    }
}

// COOKIEがなければ、新規登録
if(typeof cookieValue === "undefined" || cookieValue === "null") {
	setUniqueValueOnCookie();
	
} else {
	// MOTENASUのDBに同期します。
	asyncUnknownUser(cookieValue);
}

var visibilityChange;
if (typeof document.hidden !== "undefined") {
  visibilityChange = "visibilitychange";
} else if (typeof document.mozHidden !== "undefined") {
  visibilityChange = "mozvisibilitychange";
} else if (typeof document.msHidden !== "undefined") {
  visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
  visibilityChange = "webkitvisibilitychange";
}

// ページ遷移や更新時に発動します。
window.addEventListener("pagehide", action, false);
// android端末でブラウザを閉じる、タブを閉じる時に発動します。
window.addEventListener(visibilityChange, action, false);
// ※iphone,ipadのブラウザを閉じる、タブを閉じる動作の際はイベントの取得が出来ない為、非対応です。

//ブラウザのページ履歴ステートに値を付与します
window.history.pushState({page: 1}, "", "");

function action() {
	// クッキーデータやアンノウンユーザーデータの同期に成功していれば
	if(isAsync) {
		// 離脱時間を記録
		endTime = (new Date()).getTime();

		// 滞在時間を取得します。
		duration = getDuration(startTime, endTime);

		// タイムアウト値に達していなければ
		if(params.opt.timeout >= duration) {
			
			// Ajax通信を行います。 ブラウザ毎にAjax方式を変更します。
			if((/MSIE/.test(ua)) || (/Trident/.test(ua))) {
				var xhr = new XMLHttpRequest();
				xhr.open("post", params.opt.siteDomain + "/api/marketing/unknownuser/update/duration/" + historyId, false);
				xhr.responseType = 'json';
				xhr.onload = function (e) {
					if (xhr.readyState === 4) {
						if (xhr.status !== 200) {
							console.log("error of api program.");
						}
					}
				};
				var data = new FormData();
				data.append("duration",duration);
				data.append("apikey",params.opt.apikey);
				data.append("ipAddr",params.opt.ipAddr);
				xhr.send(data);
			} else {
				var data = new FormData();
				data.append('duration', duration);
				data.append('apikey', params.opt.apikey);
				data.append('ipAddr', params.opt.ipAddr);
				navigator.sendBeacon(params.opt.siteDomain + "/api/marketing/unknownuser/update/duration/" + historyId, data);
			}
		}
	}
	return;
}

/**
 * 一意の値を取得します。
 * @return 一意の値
 */
function setUniqueValueOnCookie() {
	var result = null
	var str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
	var length = 60;
	var value = "";
	for (var i = 0; i < length; i++){
		value+=str[Math.floor(Math.random()*str.length)];
	}

	//Cookieを保存
	document.cookie = params.cookieName + "=" + value + "; path=/; max-age=" + params.maxage;
	// MOTENASUのデータベースに同期します。
	asyncUnknownUser(value);
}

/**
 * UnknownUserデータをMOTENASUに同期します。
 * @param uid 一意のクッキー値
 */
function asyncUnknownUser(uid) {
	//セグメント群
	var segmentParam = {};
	var segmentData = {};
	var i = 0;
	for(key in params.segment) {
		segmentParam[i] = key;
		segmentData[i] = params.segment[key];
		i++;
	}
	var itemIds = {};
	var i = 0;
	for(key in params.opt.itemIds) {
		itemIds[i] = params.opt.itemIds[key];
		i++;
	}
	
	// Ajax通信を行います。
	var xhr = new XMLHttpRequest();
	xhr.open("post", params.opt.siteDomain + "/api/marketing/unknownuser/update/" + uid, false);
	xhr.onload = function (e) {
		if (xhr.readyState === 4) {
			if (xhr.status === 200) {
				try {
					// 返り値をセットします。
					var resText = JSON.parse(this.responseText || "null");
					uuid = resText.uuid;
					historyId = resText.historyId;
					// IP制限対象の場合
				} catch (e){
					isAsync = false;
					console.log("Invalid IP address.");
				}

			} else {
				isAsync = false;
				console.log("error of api program.");
			}
		}
	};
	
	var metaKeywords = document.getElementsByTagName('meta')["keywords"];
	if (metaKeywords !== undefined) {
		metaKeywords = document.getElementsByTagName('meta')["keywords"].content;
	} else {
		metaKeywords = '';
	}
	var data=new FormData();
	data.append("apikey",params.opt.apikey);
	data.append("requestUrl",params.opt.requestUrl);
	data.append("title",params.opt.title);
	data.append("metaKeywords",metaKeywords);
	data.append("referrer",params.opt.referrer);
	data.append("userAgent",params.opt.userAgent);
	data.append("ipAddr",params.opt.ipAddr);
	data.append("hostname",params.hostname);
	data.append("outsideId",params.opt.userId);
	data.append("segmentParam",segmentParam);
	data.append("segmentData",segmentData);
	data.append("loginkey",loginkey);
	data.append("itemIds",itemIds);
	xhr.send(data);
}

/**
 * 滞在時間を返却します。<br>
 * 小数点以下は切り捨て
 * @param startTime 訪問時間
 * @param endTime 離脱時間
 * @returns 滞在時間
 */
function getDuration(startTime, endTime) {
	return Math.floor((endTime - startTime) / 1000);
}