//複数回実行されるとイベントリスナーが複数登録されてしまうため、windowにdnVideoがない場合のみ実行する if (window.dnVideo === void 0) { window.dnVideo = { fullScreenStyle: 'position:fixed;width:100%;height:100%;top:0;left:0;background:#000;z-index:1000' }; var iframes = document.getElementsByTagName('iframe'); //フルスクリーン表示するターゲットを取得 function getTargetDom(data) { var targetDom = null; //IDが重複する可能性があるので、IDでのDOMの特定はやめて、srcのハッシュ値を利用する for (var i = 0, j = iframes.length; i < j; i++) { if (iframes[i].getAttribute('src').indexOf(data.hash) !== -1) { //どの子から通知が来ても、1つ目の子を拡大表示対象にする(同じhashの動画が埋め込まれる可能性がある為) targetDom = iframes[i]; break; } } return targetDom; } //子から拡大表示通知を取得 window.addEventListener('message', function (e) { var data = JSON.parse(e.data); let targetDom = getTargetDom(data); //子供にフルスクリーンの通知 targetDom.contentWindow.postMessage(JSON.stringify({flag: data.fullScreenFlag}), '*'); if (data.fullScreenFlag === true) { //フルスクリーン表示 window.dnVideo.defaultStyle = targetDom.getAttribute('style'); targetDom.setAttribute('style', window.dnVideo.fullScreenStyle); } if (data.fullScreenFlag === false) { if (window.dnVideo.defaultStyle === undefined) { return; } //初期のスタイルに戻す targetDom.setAttribute('style', window.dnVideo.defaultStyle); } }); } // ランダムな文字列を生成 function generateUuid() { // https://github.com/GoogleChrome/chrome-platform-analytics/blob/master/src/internal/identifier.js // const FORMAT: string = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"; var chars = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""); for (var i = 0, len = chars.length; i < len; i++) { switch (chars[i]) { case "x": chars[i] = Math.floor(Math.random() * 16).toString(16); break; case "y": chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16); break; } } return chars.join(""); } var expires = new Date(); expires.setFullYear(expires.getFullYear() + 100); expires = '; expires=' + expires.toUTCString(); var cookies = {}; kvs = document.cookie.split(';'); for (var i = 0; kvs[i]; i++) { var kv = kvs[i].split('='); cookies[kv[0].trim()] = kv[1]; } if (!cookies['parentUserId']) { var randomString = generateUuid(); document.cookie = 'parentUserId=' + randomString + expires; var parentUserId = randomString; } else { var parentUserId = cookies['parentUserId']; } var params = {}; var kvs = location.search.substring(1).split('&'); for (var i = 0; kvs[i]; i++) { var kv = kvs[i].split('='); params[kv[0]] = kv[1]; } // 広告IDをcookieに(新しい広告を見たら新しい広告のIDに変更) if (params['kadlink'] !== void 0) { document.cookie = 'kadlink=' + params['kadlink'] + expires; } // すでにスクリプトがある場合には2回イベントが起きないようにするためのスイッチ if (!kadSwitch) { var kadSwitch = false; } var postAdId = function () { // リスナーを一回だけ追加するために if (kadSwitch === true) { return; } // 「メッセージ」を受け取るイベントリスナー追加 window.addEventListener('message', function (e) { if (typeof e.data === 'string') { // プレイヤーを読み込めたら実行 if (typeof JSON.parse(e.data).loadOk === 'boolean') { // パラメータがある時のみ実行 if (location.search.substring(1) !== null) { var params = {}; var kvs = location.search.substring(1).split('&'); for (var i = 0; kvs[i]; i++) { var kv = kvs[i].split('='); params[kv[0]] = kv[1]; } // プレイヤーからもらったセッションIDをcookieとして保存(コンバージョン専用) document.cookie = 'ksesssionId=' + JSON.parse(e.data).sessionId + expires; if (params['kadlink'] !== void 0 || cookies['kadlink'] !== void 0) { if (params['kadlink'] === void 0) { var kadlinkData = cookies['kadlink']; } else { var kadlinkData = params['kadlink']; } // 埋め込みタグではないメディアのビデオを選択 var mediaVideo = document.getElementById(JSON.parse(e.data).hash); mediaVideo.contentWindow.postMessage(JSON.stringify({kadlink: kadlinkData,parentUserId: parentUserId}), '*'); } } } } }); kadSwitch = true; } postAdId();