You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
// Code based on vitepress-plugin-google-analytics.
|
|
// Customized as the plugin did not consider the script loading time.
|
|
// https://github.com/ZhongxuYang/vitepress-plugin-google-analytics
|
|
|
|
function mountGoogleAnalytics(id: string) {
|
|
if (("dataLayer" in window && window.gtag) || window.location.hostname === "localhost") {
|
|
return
|
|
}
|
|
|
|
const analyticsScript = document.createElement("script")
|
|
|
|
analyticsScript.addEventListener("load", () => {
|
|
// @ts-expect-error Missing types
|
|
window.dataLayer = window.dataLayer || []
|
|
function gtag(..._args: any[]) {
|
|
// @ts-expect-error Missing types
|
|
// eslint-disable-next-line prefer-rest-params
|
|
window.dataLayer.push(arguments)
|
|
}
|
|
|
|
gtag("js", new Date())
|
|
gtag("config", id)
|
|
|
|
window.gtag = gtag
|
|
})
|
|
|
|
analyticsScript.src = `https://www.googletagmanager.com/gtag/js?id=${id}`
|
|
|
|
document.body.appendChild(analyticsScript)
|
|
}
|
|
|
|
export default function ({ id }: { id: string }) {
|
|
// eslint-disable-next-line n/prefer-global/process
|
|
if (process.env.NODE_ENV === "production" && id && typeof window !== "undefined") {
|
|
mountGoogleAnalytics(id)
|
|
}
|
|
} |