github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/infrastructure/dmm_eikaiwa/testdata/49393_files/universe_cookie_sync.html (about)

     1  <!DOCTYPE html>
     2  <!-- saved from url=(0058)https://cache.send.microad.jp/js/universe_cookie_sync.html -->
     3  <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     4    
     5    <script>
     6      (function () {
     7        const cookieSyncUrls = [
     8          // google
     9          {
    10            name: "ASR-g",
    11            value: "1",
    12            probability: 1.0,
    13            cookieSyncUrl: "//aid.send.microad.jp/g/asr"
    14          },
    15          // docomo
    16          {
    17            name: "ASR_12",
    18            value: "1",
    19            probability: 1.0,
    20            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=4OWYbAiDvXE&format=pixel"
    21          },
    22          // adgene
    23          {
    24            name: "ASR_19",
    25            value: "1",
    26            probability: 1.0,
    27            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=Utqpjbqy87I&format=pixel"
    28          },
    29          // fluct
    30          {
    31            name: "ASR_20",
    32            value: "1",
    33            probability: 1.0,
    34            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=wjYYWZkhlE4&format=pixel"
    35          },
    36          // openx
    37          {
    38            name: "ASR_25",
    39            value: "1",
    40            probability: 1.0,
    41            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=ZCWe-iOHsC0&format=pixel"
    42          },
    43          // spotx
    44          {
    45            name: "ASR_29",
    46            value: "1",
    47            probability: 1.0,
    48            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=LkV6T8kjJNI&format=pixel"
    49          },
    50          // verizon
    51          {
    52            name: "ASR_30",
    53            value: "1",
    54            probability: 1.0,
    55            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=1lEd6kdM8PY&format=pixel"
    56          },
    57          // MediaNetSSP
    58          {
    59            name: "ASR_33",
    60            value: "1",
    61            probability: 1.0,
    62            cookieSyncUrl: "//aid.send.microad.jp/asr?v=1&code=jG40gaTLVE0&format=pixel"
    63          }
    64        ]
    65  
    66        const completedProcessIds = []
    67  
    68        Array.prototype.shuffle = function() {
    69          const a = this.slice();
    70          for (let i = a.length - 1; i > 0; i--) {
    71            const j = Math.floor(Math.random() * (i + 1));
    72            [a[i], a[j]] = [a[j], a[i]];
    73          }
    74          return a;
    75        }
    76  
    77        function getRandomCookieSyncUrl() {
    78          return cookieSyncUrls
    79              .filter(c => isNonDormantCookie(c))
    80              .filter(c => isSelectedByProbability(c.probability))
    81              .shuffle()
    82              .slice(0, 3)
    83        }
    84  
    85        function isSelectedByProbability(probability) {
    86          return Math.random() <= probability
    87        }
    88  
    89        function isNonDormantCookie(cookie) {
    90          return getCookieFromBrowser(cookie.name) !== cookie.value
    91        }
    92  
    93        function getCookieFromBrowser(targetKey) {
    94          const cookies = document.cookie.split(";")
    95          for (let cookie of cookies) {
    96            const trimCookieKeyValue = cookie.replace(/^\s+|\s+$/g, "");
    97            const [cookieKey, cookieValue] = trimCookieKeyValue.split("=");
    98            if (cookieKey === targetKey) {
    99              return cookieValue;
   100            }
   101          }
   102          return "";
   103        }
   104  
   105        function getMicroadCookie() {
   106          return getCookieFromBrowser("TR");
   107        }
   108  
   109        function appendCookieSyncTag(cookieSyncUrl) {
   110          const img_elem = document.createElement("img");
   111          img_elem.src = cookieSyncUrl;
   112          img_elem.width = 1;
   113          img_elem.height = 1;
   114          img_elem.frameborder = 0;
   115          img_elem.setAttribute("style", "display: none;");
   116          const body = document.getElementsByTagName("body")[0];
   117          body.insertBefore(img_elem, null);
   118        }
   119  
   120        function isSynced(processId) {
   121          return (processId in completedProcessIds)
   122        }
   123  
   124        function appendCbtParam(urlString, val) {
   125          const url = new URL(urlString)
   126          url.searchParams.append("cbt", val)
   127          return url.toString()
   128        }
   129  
   130        function startSync(cbtVal) {
   131          getRandomCookieSyncUrl()
   132              .map(x => appendCbtParam(document.location.protocol + x.cookieSyncUrl, cbtVal))
   133              .forEach(u => appendCookieSyncTag(u))
   134        }
   135  
   136        function completeProcess(processId) {
   137          completedProcessIds[processId] = 1
   138        }
   139  
   140        window.addEventListener('message', (messageEvent) => {
   141          const processId = messageEvent.data.processId
   142          if (processId === undefined || processId.length === 0) return
   143  
   144          // 処理済みチェック
   145          if (isSynced(processId)) return
   146  
   147          // aid があるか?
   148          if (!getMicroadCookie()) return
   149  
   150          // 二重処理しないように、先に completedProcessId に processId を入れる
   151          completeProcess(processId)
   152  
   153          startSync(processId)
   154        }, false);
   155  
   156      })();
   157    </script>
   158  </head>
   159  <body>
   160  
   161  
   162  </body></html>