装好不算子,时而他就不显示了,像个幽灵一样.其实只要我们仔细分析,可以定位到问题的。
安装 busuanzi
next 主题集成了
busuanzi,我们只要在配置文件中把busuanzi_count
打开即可
注意我们安装的是新版本,只要保证文件layout\_third-party\statistics\busuanzi-counter.njk
里的网址是"https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"
就行
不蒜子计数依赖于浏览器请求中的 Referer
信息来获取页面的访问量数据。如果你使用的浏览器具有阻止跨站追踪功能(例如
Safari),那么浏览器可能会忽略网站设定而使用最严格的
Referrer-Policy,导致加载的访问量数据不准确。另见 https://caniuse.com/referrer-policy
live2d 导致 busuanzi 不显示
正常情况下, busuanzi 会向 head 中 append 的一个 script 标签名为
scriptTag,用于加载数据;数据加载完成后,通过
scriptTag.parentElement.removeChild(scriptTag) 移除之;在启用
hexo-helper-live2d 时,scriptTag.parentElement 为 null
(原因未知),导致 try catch 语句执行,通过 bszTag.hides()
将页面上的所有统计数据隐藏。
我个人没有兴趣继续研究此问题,目前只能建议不要同时使用 busuanzi 和
hexo-helper-live2d。考虑到此问题与 NexT
主题本身无关,请联系这两个项目的维护者讨论和解决。
可能导致 Hexo 或 NexT 出现问题的插件或服务
hexo-helper-live2d |
会导致不蒜子计数无法加载 |
不要同时使用 |
theme-next/hexo-theme-next#1233 (comment) |
aplayer |
导致中文目录无法点击 |
不要使用 |
aplayer DIYgod/APlayer#242 |
不显示问题解决 1
经查,不蒜子部分源码的 style 从 "display: inline;" 替换为了 "display:
none;"
发现next\source\css\_common\components\post\post-header.styl
和next\source\css\_common\outline\footer\index.styl
中有设置"display:
none;"
而 busuanzi
在界面中展示,是在layout\_partials\footer.njk
和layout\_partials\post\post-meta.njk
中实现的,并且通过匹配
id,造成应用了 styl 中的不显示属性
于是,解决方案有两种,一个是把 styl 中的隐藏去掉,另一个,是把界面中的 id
改掉
第一种方案,对我们掌握到的源码来说有效,可以让 styl
失效.但是我们还有一个不可控因素,就是那个 busuanzi.ibruce.info 里的 js
文件.这个源码我们看不到,它很可能就会通过匹配 id
把属性又设置上去(已证实.即使我们把本地 css 去掉,只要一运行 js
文件,display-none 就又回来了)
所以,我们九八两个文件中的 id 改掉就好,在后面加一个 1 吧,哈哈
改成busuanzi_container_site_uv1
和busuanzi_container_page_pv1
注意,只需要修改 container,别把 value 改了,value
改了,它就找不到标签来显示数字了.因为 styl 是引用在 container 上的
不显示问题解决 2
将不蒜子的 js
插件保存到本地blog\source\js\busuanzi.pure.mini.js
如果使用的是来自外网的 js 文件,也下载到本地。将 js
文件更改为如下:
var bszCaller, bszTag; !(function () { var c, d, e, a = !1, b = []; (ready = function (c) { return ( a || "interactive" === document.readyState || "complete" === document.readyState ? c.call(document) : b.push(function () { return c.call(this); }), this ); }), (d = function () { for (var a = 0, c = b.length; c > a; a++) b[a].apply(document); b = []; }), (e = function () { a || ((a = !0), d.call(window), document.removeEventListener ? document.removeEventListener("DOMContentLoaded", e, !1) : document.attachEvent && (document.detachEvent("onreadystatechange", e), window == window.top && (clearInterval(c), (c = null)))); }), document.addEventListener ? document.addEventListener("DOMContentLoaded", e, !1) : document.attachEvent && (document.attachEvent("onreadystatechange", function () { /loaded|complete/.test(document.readyState) && e(); }), window == window.top && (c = setInterval(function () { try { a || document.documentElement.doScroll("left"); } catch (b) { return; } e(); }, 5))); })(), (bszCaller = { fetch: function (a, b) { var c = "BusuanziCallback_" + Math.floor(1099511627776 * Math.random()); (window[c] = this.evalCall(b)), (a = a.replace("=BusuanziCallback", "=" + c)), (scriptTag = document.createElement("SCRIPT")), (scriptTag.type = "text/javascript"), (scriptTag.defer = !0), (scriptTag.src = a), (scriptTag.referrerPolicy = "no-referrer-when-downgrade"), document.getElementsByTagName("HEAD")[0].appendChild(scriptTag); }, evalCall: function (a) { return function (b) { ready(function () { try { a(b), scriptTag.parentElement.removeChild(scriptTag); } catch (c) { bszTag.hides(); } }); }; }, }), bszCaller.fetch( "//busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback", function (a) { bszTag.texts(a), bszTag.shows(); } ), (bszTag = { bszs: ["site_pv", "page_pv", "site_uv"], texts: function (a) { this.bszs.map(function (b) { var c = document.getElementById("busuanzi_value_" + b); c && (c.innerHTML = a[b]); }); }, hides: function () { this.bszs.map(function (a) { var b = document.getElementById("busuanzi_container_" + a); b && (b.style.display = ""); }); }, shows: function () { this.bszs.map(function (a) { var b = document.getElementById("busuanzi_container_" + a); b && (b.style.display = "inline"); }); }, });
|
操作其实就是把其中的 b.style.display="none"中 none 去掉。
再把themes/next/layout/_third-party/statistics/busuanzi-counter.njk
中的busuanzi链接改为本地/js/busuanzi.pure.mini.js
最后把next\source\css\_common\components\post\post-header.styl
和next\source\css\_common\outline\footer\index.styl
中的"display:
none;"改为"display: inline"