Initial commit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
{{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}}
|
||||
Reference in New Issue
Block a user