diff --git a/docs/.vitepress/config/head.ts b/docs/.vitepress/config/head.ts index 94fdddd00..b6e311277 100644 --- a/docs/.vitepress/config/head.ts +++ b/docs/.vitepress/config/head.ts @@ -27,17 +27,33 @@ export const head: HeadConfig[] = [ s.parentNode.insertBefore(hm, s); })();`], // 页面访问量统计 - ['script', {}, `var pageUrl = location.href; - (function() { + ['script', {}, ` + window.addEventListener('load', function() { + let oldHref = document.location.href, bodyDOM = document.querySelector('body'); + const observer = new MutationObserver(function(mutations) { + if (oldHref != document.location.href) { + oldHref = document.location.href; + getPv() + window.requestAnimationFrame(function() { + let tmp = document.querySelector('body'); + if(tmp != bodyDOM) { + bodyDOM = tmp; + observer.observe(bodyDOM, config); + } + }) + } + }); + const config = { + childList: true, + subtree: true + }; + observer.observe(bodyDOM, config); + getPv() + }, true); + + function getPv() { xhr = new XMLHttpRequest(); - xhr.open('GET', 'https://api.charles7c.top/blog/pv?pageUrl=' + pageUrl + "&t=" + new Date().getTime()); + xhr.open('GET', 'https://api.charles7c.top/blog/pv?pageUrl=' + location.href); xhr.send(); - })();`] - /*['script', {}, `var pageUrl = location.href; - (function() { - var pv = document.createElement("script"); - pv.src = "https://api.charles7c.top/blog/pv?pageUrl=" + pageUrl; - var s = document.getElementsByTagName("script")[0]; - s.parentNode.insertBefore(pv, s); - })();`]*/ + }`] ] \ No newline at end of file diff --git a/docs/.vitepress/theme/api/interface.js b/docs/.vitepress/theme/api/interface.js index 368402c16..f5900eac2 100644 --- a/docs/.vitepress/theme/api/interface.js +++ b/docs/.vitepress/theme/api/interface.js @@ -1,6 +1,6 @@ import { request } from './config' -export const getPv = (id, pageUrl, call) => { +export const getArticleViewCount = (id, pageUrl, call) => { request.get(`/article/view/${id}?pageUrl=${pageUrl}`, {}).then(result => { call(process(result)) }) @@ -14,4 +14,4 @@ function process(result) { } } -export default { getPv } \ No newline at end of file +export default { getArticleViewCount } \ No newline at end of file diff --git a/docs/.vitepress/theme/components/ArticleMetadata.vue b/docs/.vitepress/theme/components/ArticleMetadata.vue index d7cc3f765..b6a15ac29 100644 --- a/docs/.vitepress/theme/components/ArticleMetadata.vue +++ b/docs/.vitepress/theme/components/ArticleMetadata.vue @@ -83,7 +83,7 @@ const { author, authorLink, showViewCount, viewCount, date, toDate, categories, if (data.showViewCount) { // 记录并获取文章阅读数(使用文章标题 + 发布时间生成 MD5 值,作为文章的唯一标识) onMounted(() => { - $api.getPv(md5(props.article.title + props.article.date), location.href, function(viewCountData) { + $api.getArticleViewCount(md5(props.article.title + props.article.date), location.href, function(viewCountData) { data.viewCount = viewCountData }) })