PageSourceSearch

https://www.veriteclinic.or.jp/new/wp-content/themes/verite2025/as…/reservation/direct/tracking-params.js

js veriteclinic.or.jp collected 2026-10-05 02:56:46 UTC 4,410 bytes, 153 lines download raw bytes

1/**
2 * 動線B: B4A 直リンク — UTM・広告系パラメータの読込時付与
3 *
4 * Cookie(veriteUtmFirst.read)の UTM 6 種 + 現在ページ URL の対象キー。
5 * 同一キーは URL 優先(PHP verite_reservation_redirect_query_args と同等)。
6 *
7 * 動線A(/reservation/ 中継)では isRelayPage のためスキップ。
8 */
9(function () {
10    'use strict';
11
12    function runWhenDomReady(fn) {
13        if (document.readyState === 'loading') {
14            document.addEventListener('DOMContentLoaded', fn);
15        } else {
16            fn();
17        }
18    }
19
20    function getLinks() {
21        return window.veriteReservationLinks || {};
22    }
23
24    function getAttributionKeys() {
25        var cfg = window.veriteReservationKeys;
26        if (cfg && Array.isArray(cfg.attribution) && cfg.attribution.length > 0) {
27            return cfg.attribution;
28        }
29        if (cfg && Array.isArray(cfg.utm) && cfg.utm.length > 0) {
30            return cfg.utm.slice();
31        }
32        return [
33            'utm_source',
34            'utm_medium',
35            'utm_campaign',
36            'utm_content',
37            'utm_term',
38            'utm_id',
39        ];
40    }
41
42    function readUtmFromCookies() {
43        if (!window.veriteUtmFirst || typeof window.veriteUtmFirst.read !== 'function') {
44            return {};
45        }
46        var raw = window.veriteUtmFirst.read();
47        if (!raw || typeof raw !== 'object') {
48            return {};
49        }
50        return raw;
51    }
52
53    function readParamsFromPageUrl(keys) {
54        var out = {};
55        var params;
56        var i;
57        try {
58            params = new URLSearchParams(window.location.search);
59        } catch (e) {
60            return out;
61        }
62        for (i = 0; i < keys.length; i++) {
63            var key = keys[i];
64            if (!params.has(key)) {
65                continue;
66            }
67            var val = params.get(key);
68            if (val != null && val !== '') {
69                out[key] = String(val);
70            }
71        }
72        return out;
73    }
74
75    function collectParams() {
76        var keys = getAttributionKeys();
77        var fromCookies = readUtmFromCookies();
78        var fromPage = readParamsFromPageUrl(keys);
79        var merged = {};
80        var utmKeys = window.veriteReservationKeys && Array.isArray(window.veriteReservationKeys.utm)
81            ? window.veriteReservationKeys.utm
82            : keys;
83        var i;
84        var key;
85
86        for (i = 0; i < utmKeys.length; i++) {
87            key = utmKeys[i];
88            if (fromCookies[key]) {
89                merged[key] = String(fromCookies[key]);
90            }
91        }
92
93        for (i = 0; i < keys.length; i++) {
94            key = keys[i];
95            if (fromPage[key]) {
96                merged[key] = fromPage[key];
97            }
98        }
99
100        return merged;
101    }
102
103    function appendParams(anchor, params) {
104        if (!anchor || !anchor.getAttribute || !params) {
105            return;
106        }
107        try {
108            var u = new URL(anchor.getAttribute('href') || '', window.location.href);
109            var paramKeys = Object.keys(params);
110            var i;
111            for (i = 0; i < paramKeys.length; i++) {
112                var key = paramKeys[i];
113                if (key === 'cta_from' || key === 'cta_slot') {
114                    continue;
115                }
116                if (u.searchParams.has(key)) {
117                    continue;
118                }
119                u.searchParams.set(key, params[key]);
120            }
121            anchor.href = u.toString();
122        } catch (err) {
123            /* 無視 */
124        }
125    }
126
127    function apply() {
128        var links = getLinks();
129        if (typeof links.isRelayPage === 'function' && links.isRelayPage()) {
130            return;
131        }
132
133        var params = collectParams();
134        if (Object.keys(params).length === 0) {
135            return;
136        }
137
138        var anchors = document.querySelectorAll('a[href]');
139        var i;
140        for (i = 0; i < anchors.length; i++) {
141            var a = anchors[i];
142            if (typeof links.shouldSkipAnchor === 'function' && links.shouldSkipAnchor(a)) {
143                continue;
144            }
145            if (typeof links.isHref !== 'function' || !links.isHref(a.href)) {
146                continue;
147            }
148            appendParams(a, params);
149        }
150    }
151
152    runWhenDomReady(apply);
153})();

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.