UNPKG

vitepress-theme-base-teek

Version:
251 lines (235 loc) 7.36 kB
//@ts-nocheck // export interface BusuanziData { // site_pv?: number; // page_pv?: number; // site_uv?: number; // page_uv?: number; // } // // interface BusuanziCaller { // fetch: (url: string, callback: (data: BusuanziData) => void) => void; // evalCall: (callback: (data: BusuanziData) => void) => (data: BusuanziData) => void; // } // // let bszCaller: BusuanziCaller; // let scriptTag: HTMLScriptElement | null = null; // let ready: (callback: () => void) => void; // let e: () => void; // let n: () => void; // let a = false; // let c: Array<() => void> = []; // // // 修复Node同构代码的问题 // if (typeof document !== "undefined") { // ready = function (t: () => void) { // return ( // a || document.readyState === "interactive" || document.readyState === "complete" // ? t.call(document) // : c.push(function () { // return t.call(this); // }), // this // ); // }; // e = function () { // for (let t = 0, e = c.length; t < e; t++) c[t].apply(document); // c = []; // }; // n = function () { // if (!a) { // a = true; // e.call(window); // if (document.removeEventListener) { // document.removeEventListener("DOMContentLoaded", n, false); // } else if (document.attachEvent) { // document.detachEvent("onreadystatechange", n); // if (window === window.top) { // clearInterval(t); // t = null; // } // } // } // }; // if (document.addEventListener) { // document.addEventListener("DOMContentLoaded", n, false); // } else if (document.attachEvent) { // document.attachEvent("onreadystatechange", function () { // if (/loaded|complete/.test(document.readyState)) n(); // }); // if (window === window.top) { // let t = setInterval(function () { // try { // if (!a) document.documentElement.doScroll("left"); // } catch (t) { // return; // } // n(); // }, 5); // } // } // } // // bszCaller = { // fetch: function (t: string, e: (data: BusuanziData) => void) { // const n = "BusuanziCallback_" + Math.floor(1099511627776 * Math.random()); // t = t.replace("=BusuanziCallback", "=" + n); // scriptTag = document.createElement("SCRIPT"); // scriptTag.type = "text/javascript"; // scriptTag.defer = true; // scriptTag.src = t; // document.getElementsByTagName("HEAD")[0].appendChild(scriptTag); // window[n] = this.evalCall(e); // }, // evalCall: function (e: (data: BusuanziData) => void) { // return function (t: BusuanziData) { // ready(function () { // try { // e(t); // if (scriptTag && scriptTag.parentElement && scriptTag.parentElement.removeChild) { // scriptTag.parentElement.removeChild(scriptTag); // } // } catch (t) { // console.log(t); // } // }); // }; // }, // }; // // const bszTag = { // bszs: ["site_pv", "site_uv", "page_pv", "page_uv"], // texts: function (n) { // this.bszs.map(function (t) { // const e = document.getElementById("busuanzi_" + t); // e && (e.innerHTML = n[t]); // }); // }, // hides: function () { // this.bszs.map(function (t) { // const e = document.getElementById("busuanzi_container_" + t); // e && (e.style.display = "none"); // }); // }, // shows: function () { // this.bszs.map(function (t) { // const e = document.getElementById("busuanzi_container_" + t); // e && (e.style.display = "inline"); // }); // }, // }; // // // export default () => { // bszCaller.fetch("//busuanzi.9420.ltd/api", function (t) { // bszTag.texts(t) // bszTag.shows(); // }) // }; /** * * 避免 SSR 期间访问 document 和 window:用 typeof window !== "undefined" 进行判断。 * 确保 fetch 代码只在客户端运行。 * 避免直接在模块顶层执行副作用代码(如 document.addEventListener),应该等到组件挂载后执行。 * */ export interface BusuanziData { site_pv?: number; site_uv?: number; page_pv?: number; page_uv?: number; } interface BusuanziCaller { fetch: (url: string, callback: (data: BusuanziData) => void) => void; evalCall: (callback: (data: BusuanziData) => void) => (data: BusuanziData) => void; } let bszCaller: BusuanziCaller; let scriptTag: HTMLScriptElement | null = null; // 只在浏览器环境下执行 if (typeof window !== "undefined") { let ready: (callback: () => void) => void; let e: () => void; let n: () => void; let a = false; let c: Array<() => void> = []; ready = function (t: () => void) { return ( a || document.readyState === "interactive" || document.readyState === "complete" ? t.call(document) : c.push(() => t.call(document)), this ); }; e = function () { for (let t = 0, len = c.length; t < len; t++) c[t].apply(document); c = []; }; n = function () { if (!a) { a = true; e.call(window); document.removeEventListener("DOMContentLoaded", n, false); } }; document.addEventListener("DOMContentLoaded", n, false); bszCaller = { fetch: function (t: string, e: (data: BusuanziData) => void) { const callbackName = "BusuanziCallback_" + Math.floor(1099511627776 * Math.random()); t = t.replace("=BusuanziCallback", "=" + callbackName); scriptTag = document.createElement("script"); scriptTag.type = "text/javascript"; scriptTag.defer = true; scriptTag.src = t; document.getElementsByTagName("HEAD")[0].appendChild(scriptTag); (window as any)[callbackName] = this.evalCall(e); }, evalCall: function (e: (data: BusuanziData) => void) { return function (t: BusuanziData) { ready(function () { try { e(t); if (scriptTag?.parentElement) { scriptTag.parentElement.removeChild(scriptTag); } } catch (err) { console.error(err); } }); }; }, }; } const bszTag = { bszs: ["site_pv", "site_uv", "page_pv", "page_uv"], texts(n: BusuanziData) { if (typeof document !== "undefined") { this.bszs.forEach((t) => { const e = document.getElementById("busuanzi_" + t); e && (e.innerHTML = String(n[t] ?? "")); }); } }, hides() { if (typeof document !== "undefined") { this.bszs.forEach((t) => { const e = document.getElementById("busuanzi_container_" + t); e && (e.style.display = "none"); }); } }, shows() { if (typeof document !== "undefined") { this.bszs.forEach((t) => { const e = document.getElementById("busuanzi_container_" + t); e && (e.style.display = "inline"); }); } }, }; export default () => { if (typeof window !== "undefined") { bszCaller.fetch("//busuanzi.9420.ltd/js", function (t) { bszTag.texts(t); bszTag.shows(); }); } };