修复 hexo+butterfly 不蒜子无法显示计数问题与初始化计数

最近发现侧栏里的访客统计长时间转圈,网上查了一下,诊断为官方域名过期。我参考 这篇文章,在 Butterfly(Pug 模板)里按下面顺序改,很快就恢复了,顺便加上了自定义的初始计数。
先确认 themes/butterfly/_config.yml 里 busuanzi.site_uv/site_pv/page_pv 为 true。接下来依次修改 2 个 Pug 文件。
1. 修改 additional-js.pug
路径:themes\butterfly\layout\includes\additional-js.pug
原代码(默认写法长这样,核心是 //busuanzi... 和没有偏移脚本):
1 2
| if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv script(async data-pjax src=theme.asset.busuanzi ? url_for(theme.asset.busuanzi) : '//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js')
|
替换成下面完整片段(HTTPS + 偏移脚本):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv script(async data-pjax src=theme.asset.busuanzi ? url_for(theme.asset.busuanzi) : 'https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js') script. (function() { var pvcountOffset = 20000; // 根据自己的历史数据调整 var uvcountOffset = 10000; var pvProcessed = false; var uvProcessed = false;
function fixCount() { if (!pvProcessed) { var pv = document.getElementById('busuanzi_value_site_pv'); if (pv) { var spinner = pv.querySelector('i.fa-spinner'); var txt = pv.textContent.trim(); if (!spinner && txt && /\d+/.test(txt)) { var cur = parseInt(txt.replace(/[^\d]/g, '')) || 0; pv.textContent = (cur + pvcountOffset).toLocaleString(); pvProcessed = true; } } } if (!uvProcessed) { var uv = document.getElementById('busuanzi_value_site_uv'); if (uv) { var spinner = uv.querySelector('i.fa-spinner'); var txt = uv.textContent.trim(); if (!spinner && txt && /\d+/.test(txt)) { var cur = parseInt(txt.replace(/[^\d]/g, '')) || 0; uv.textContent = (cur + uvcountOffset).toLocaleString(); uvProcessed = true; } } } return pvProcessed && uvProcessed; }
var int = setInterval(function() { if (fixCount()) clearInterval(int); }, 50); setTimeout(function() { clearInterval(int); }, 10000); })();
|
2. 修改 head/preconnect.pug
路径:themes\butterfly\layout\includes\head\preconnect.pug
为了让浏览器预连接到新的域名,先找到 原代码:
1
| link(rel="preconnect" href="//busuanzi.ibruce.info")
|
把它改成:
1
| link(rel="preconnect" href="https://busuanzi.ibruce.info")
|
,这样 HTTPS 页面就不会因为协议问题阻断请求了。
改完后运行 hexo clean、hexo d,刷新页面通常就能看到数值。如果还是空白,多半是本地缓存或国内网络把 busuanzi 拦了,稍等一会再刷新。偏移量随时可以改脚本开头的 pvcountOffset / uvcountOffset,需要对文章页 PV 做同样处理时,把 busuanzi_value_page_pv 的逻辑照抄一份即可。