vitepress-theme-base-teek
Version:
251 lines (235 loc) • 7.36 kB
text/typescript
//@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();
});
}
};