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

image-20260113161659886

最近发现侧栏里的访客统计长时间转圈,网上查了一下,诊断为官方域名过期。我参考 这篇文章,在 Butterfly(Pug 模板)里按下面顺序改,很快就恢复了,顺便加上了自定义的初始计数。

先确认 themes/butterfly/_config.ymlbusuanzi.site_uv/site_pv/page_pvtrue。接下来依次修改 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 cleanhexo d,刷新页面通常就能看到数值。如果还是空白,多半是本地缓存或国内网络把 busuanzi 拦了,稍等一会再刷新。偏移量随时可以改脚本开头的 pvcountOffset / uvcountOffset,需要对文章页 PV 做同样处理时,把 busuanzi_value_page_pv 的逻辑照抄一份即可。