Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
168 lines
6.0 KiB
HTML
168 lines
6.0 KiB
HTML
{{define "trackerInit"}}
|
||
{{/* PC:defer 正常加载;H5:延后注入 SDK,降低首屏带宽与主线程争抢 */}}
|
||
<script>
|
||
window.__TRACKER_BOOT__ = {
|
||
appId: "{{InTrackerAppId}}",
|
||
encryptedConfig: {{jsonStr .appConfig.ReportSDKConfig}},
|
||
appVersion: "1.0.0",
|
||
pageKey: "{{.pageKey}}",
|
||
pageName: "{{.pageName}}"
|
||
};
|
||
window.__IS_H5__ = !!(window.matchMedia && window.matchMedia("(max-width: 767px)").matches);
|
||
</script>
|
||
{{/* PC 保留原 defer;H5 不在此拉取,由下方脚本空闲时注入 */}}
|
||
<script>
|
||
(function () {
|
||
if (window.__IS_H5__) return;
|
||
var s1 = document.createElement("script");
|
||
s1.defer = true;
|
||
s1.src = "/static/common/web-sdk-v1.1.8.js?v=1";
|
||
document.head.appendChild(s1);
|
||
var s2 = document.createElement("script");
|
||
s2.defer = true;
|
||
s2.src = "/static/js/tracker.js?v=3";
|
||
document.head.appendChild(s2);
|
||
})();
|
||
</script>
|
||
<script>
|
||
(function () {
|
||
var isH5 = !!window.__IS_H5__;
|
||
var sdkSrc = "/static/common/web-sdk-v1.1.8.js?v=1";
|
||
var trackerSrc = "/static/js/tracker.js?v=3";
|
||
|
||
function getQueryParam(name) {
|
||
try {
|
||
var s = window.location.search || "";
|
||
var m = new RegExp("[?&]" + name + "=([^&#]*)").exec(s);
|
||
return m ? decodeURIComponent(m[1].replace(/\+/g, " ")) : "";
|
||
} catch (e) { return ""; }
|
||
}
|
||
function getCookie(name) {
|
||
try {
|
||
var match = document.cookie.match(new RegExp("(?:^|; )" + name + "=([^;]*)"));
|
||
return match ? decodeURIComponent(match[1]) : "";
|
||
} catch (e) { return ""; }
|
||
}
|
||
// 渠道采用首次归因:dc、ch、pc 按落地页项目的顺序识别,已有渠道不覆盖。
|
||
function getStoredChannel() {
|
||
try {
|
||
var storedChannel = window.localStorage.getItem("channel");
|
||
storedChannel = storedChannel ? String(storedChannel).trim() : "";
|
||
if (storedChannel) return storedChannel;
|
||
|
||
var channel = getQueryParam("dc") || getQueryParam("ch") || getQueryParam("pc") || "";
|
||
channel = String(channel).trim();
|
||
if (channel) window.localStorage.setItem("channel", channel);
|
||
return channel;
|
||
} catch (e) {
|
||
// localStorage 被禁用时仍使用当前 URL 的渠道码完成本次上报。
|
||
return String(getQueryParam("dc") || getQueryParam("ch") || getQueryParam("pc") || "").trim();
|
||
}
|
||
}
|
||
// H5 埋点脚本会延迟加载,先同步落盘,避免用户快速跳转时丢失首次渠道。
|
||
var trackerChannel = getStoredChannel();
|
||
function loadScript(src) {
|
||
return new Promise(function (resolve, reject) {
|
||
var existing = document.querySelector('script[src="' + src + '"]');
|
||
if (existing) {
|
||
if (existing.getAttribute("data-loaded") === "1" || typeof window.trackerInit === "function") {
|
||
resolve();
|
||
return;
|
||
}
|
||
existing.addEventListener("load", function () { resolve(); });
|
||
existing.addEventListener("error", reject);
|
||
return;
|
||
}
|
||
var s = document.createElement("script");
|
||
s.src = src;
|
||
s.async = true;
|
||
s.onload = function () {
|
||
s.setAttribute("data-loaded", "1");
|
||
resolve();
|
||
};
|
||
s.onerror = reject;
|
||
document.head.appendChild(s);
|
||
});
|
||
}
|
||
function bootTracker() {
|
||
if (typeof window.trackerInit !== "function" || !window.__TRACKER_BOOT__) return;
|
||
var uid = getQueryParam("uid") || getCookie("uid") || getCookie("userId") || "";
|
||
var cfg = window.__TRACKER_BOOT__;
|
||
window.trackerInit({
|
||
appId: cfg.appId,
|
||
uid: uid,
|
||
channel: trackerChannel,
|
||
encryptedConfig: cfg.encryptedConfig,
|
||
appVersion: cfg.appVersion,
|
||
pageKey: cfg.pageKey,
|
||
pageName: cfg.pageName,
|
||
});
|
||
}
|
||
function whenTrackerReady(cb) {
|
||
if (typeof window.trackerInit === "function") {
|
||
cb();
|
||
return;
|
||
}
|
||
var n = 0;
|
||
var t = setInterval(function () {
|
||
n += 1;
|
||
if (typeof window.trackerInit === "function" || n > 40) {
|
||
clearInterval(t);
|
||
cb();
|
||
}
|
||
}, 100);
|
||
}
|
||
function bootAnalytics() {
|
||
var run = function () {
|
||
bootTracker();
|
||
};
|
||
if (isH5) {
|
||
loadScript(sdkSrc)
|
||
.then(function () { return loadScript(trackerSrc); })
|
||
.then(run)
|
||
.catch(function () {});
|
||
return;
|
||
}
|
||
whenTrackerReady(run);
|
||
}
|
||
function scheduleBoot() {
|
||
if (isH5) {
|
||
if ("requestIdleCallback" in window) {
|
||
requestIdleCallback(bootAnalytics, { timeout: 4000 });
|
||
} else {
|
||
setTimeout(bootAnalytics, 2500);
|
||
}
|
||
return;
|
||
}
|
||
if (document.readyState === "loading") {
|
||
document.addEventListener("DOMContentLoaded", bootAnalytics);
|
||
} else {
|
||
bootAnalytics();
|
||
}
|
||
}
|
||
scheduleBoot();
|
||
})();
|
||
</script>
|
||
<!-- Yandex.Metrika counter -->
|
||
<script type="text/javascript">
|
||
(function(m,e,t,r,i,k,a){
|
||
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
|
||
m[i].l=1*new Date();
|
||
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
|
||
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
|
||
})(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id={{if .isNavPage}}112390883{{else}}112387687{{end}}', 'ym');
|
||
|
||
ym({{if .isNavPage}}112390883{{else}}112387687{{end}}, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", referrer: document.referrer, url: location.href, accurateTrackBounce:true, trackLinks:true});
|
||
</script>
|
||
<!-- /Yandex.Metrika counter -->
|
||
<!-- Google tag (gtag.js) -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id={{if .isNavPage}}G-SY26Y2MSHS{{else}}G-TZQS2NZ3TN{{end}}"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', '{{if .isNavPage}}G-SY26Y2MSHS{{else}}G-TZQS2NZ3TN{{end}}');
|
||
</script>
|
||
{{end}}
|