在Valine 1.5.1版本实现QQ邮箱识别生成头像地址

代码原作者:cungudafa(CSDN),Valine 1.2.10至1.4.4的更改办法见原文

问题

在升级为Valine1.5.1后,再按文章中方法,在Valine.min.js中加入代码时,出现了评论无法加载的问题(评论区内只显示{}
原代码:

1
2
3
4
5
6
7
8
9
var qq_img = E.cdn+(0,s.default)(t.get("mail"))+E.params;
if (t.get("mail").indexOf("@qq.com") >= 0) {
var prefix = t.get("mail").replace(/@.*/, "");//前缀
var pattern = /^\d+$/g; //正则表达式
var result = prefix.match(pattern);//match 是匹配的意思
if (result !== null) {
qq_img = "//q1.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
}
}

原因

在1.5.1版本的Valine.min.js中的这段代码(代码框下有滑动条,别改怪我没告诉你)

1
f = $.hide ? "" : e.cfg.enableQQ && t.get("QQAvatar") ? (0, C.default)('<img class="vimg" src="' + j(t.get("QQAvatar")) + '" referrerPolicy="no-referrer"/>') : '<img class="vimg" src="' + (E.cdn+(0,s.default)(n.get("mail"))+E.params;) + $.params) + '">',

其中src=中间部分在更新时
E.cdn+(0,s.default)(n.get("mail"))+E.params;
更改为$.cdn + (0, u.default)(t.get("mail")) + $.params
将代码首句更改为var qq_img = $.cdn + (0, u.default)(t.get("mail")) + $.params即可
更改后代码:
1
2
3
4
5
6
7
8
9
var qq_img = $.cdn + (0, u.default)(t.get("mail")) + $.params
if (t.get("mail").indexOf("@qq.com") >= 0) {
var prefix = t.get("mail").replace(/@.*/, "");
var pattern = /^\d+$/g; //正则表达式
var result = prefix.match(pattern);` `
if (result !== null) {
qq_img = "//q2.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
}
}

其他方法都与原来相同

拓展

假如使用了Valine博主标签的修改版Valine.min.js,代码结构会稍有不同

首先还是在Valine.min.js直接搜索vimg,找到这段代码

1
u = (V.hide ? "" : s.cfg.enableQQ && e.get("QQAvatar") ? (0, U.default)('<img class="vimg" src="' + (y(e.get("QQAvatar"))) + '" referrerPolicy="no-referrer"/>') : '<img class="vimg" src="' + (V.cdn + (0, j.default)(e.get("mail")) + V.params) + '">') + '<div class="vh"><div class="vhead">' + a + " " + i + '</div><div class="vmeta"><span class="vtime" >' + (0, R.default)(e.get("insertedAt"), s.i18n) + '</span><span class="vat" data-vm-id="' + (e.get("rid") || e.id) + '" data-self-id="' + e.id + '">' + s.i18n.t("reply") + '</span></div><div class="vcontent" data-expand="' + s.i18n.t("expand") + '">' + (0, N.default)(e.get("comment")) + '</div><div class="vreply-wrapper" data-self-id="' + e.id + '"></div><div class="vquote" data-self-id="' + e.id + '"></div></div>',

将本段第二个vimg后的
1
'<img class="vimg" src="' + (V.cdn + (0, j.default)(e.get("mail")) + V.params) + '">'

更改为
1
'<img class="vimg" src="' + (QQ_img) + '">'

同时将原来插入的代码更改为(不止第一句有更改哦)
1
2
3
4
5
6
7
8
9
var QQ_img = V.cdn + (0, j.default)(e.get("mail")) + V.params
if (e.get("mail").indexOf("@qq.com") >= 0) {
var prefix = e.get("mail").replace(/@.*/, "");
var pattern = /^\d+$/g;
var result = prefix.match(pattern);` `
if (result !== null) {
QQ_img = "//q2.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
}
}

接着找到这段代码(搜索((0, j.default)(e.get("mail")))),
1
2
3
4
5
b = function(e, t, n) {
var r = (0, L.default)('<div class="vcard" id="' + e.id + '"></div>'),
o = (0, U.default)(e.get("ua")),
i = "",
o = (o && !/ja/.test(s.cfg.lang) && (i = (o = L.default.detect(o)).version ? o.os ? '<span class="vsys"><i class="browser-icon fab fa-' + (["xiaomi"].includes(o.browser.toLowerCase()) ? "mobile-alt fas" : o.browser.toLowerCase()) + '"></i>' + o.browser + " " + o.version + '</span> <span class="vsys"><i class="os-icon fab fa-' + (["mac os", "ios"].includes(o.os.toLowerCase()) ? "apple" : o.os.toLowerCase()) + '"></i>' + o.os + " " + o.osVersion + "</span>" : "" : '<span class="vsys">' + o.browser + "</span>"), "*" === s.cfg.path && (i = '<a href="' + e.get("url") + '" class="vsys">' + e.get("url") + "</a>"), s.cfg.master.includes((0, j.default)(e.get("mail")))),

将最后一句s.cfg.master.includes((0, j.default)(e.get("mail")))),最后的逗号改为分号,并在其后换行,将代码分为上下两部分
紧接着把后面部分的
1
a = s.cfg.friends.includes((0, j.default)(e.get("mail").toLowerCase())),

前加上var,即为
1
var a = s.cfg.friends.includes((0, j.default)(e.get("mail").toLowerCase())),

最后将插入的代码粘贴在刚刚换行的位置,即分开的两段之间
最终代码长这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
b = function(e, t, n) {
var r = (0, L.default)('<div class="vcard" id="' + e.id + '"></div>'),
o = (0, U.default)(e.get("ua")),
i = "",
o = (o && !/ja/.test(s.cfg.lang) && (i = (o = L.default.detect(o)).version ? o.os ? '<span class="vsys"><i class="browser-icon fab fa-' + (["xiaomi"].includes(o.browser.toLowerCase()) ? "mobile-alt fas" : o.browser.toLowerCase()) + '"></i>' + o.browser + " " + o.version + '</span> <span class="vsys"><i class="os-icon fab fa-' + (["mac os", "ios"].includes(o.os.toLowerCase()) ? "apple" : o.os.toLowerCase()) + '"></i>' + o.os + " " + o.osVersion + "</span>" : "" : '<span class="vsys">' + o.browser + "</span>"), "*" === s.cfg.path && (i = '<a href="' + e.get("url") + '" class="vsys">' + e.get("url") + "</a>"), s.cfg.master.includes((0, j.default)(e.get("mail"))));
// 拉取qq
var QQ_img = V.cdn + (0, j.default)(e.get("mail")) + V.params
if (e.get("mail").indexOf("@qq.com") >= 0) {
var prefix = e.get("mail").replace(/@.*/, "");
var pattern = /^\d+$/g;
var result = prefix.match(pattern);` `
if (result !== null) {
QQ_img = "//q2.qlogo.cn/g?b=qq&nk=" + prefix + "&s=100";
}
}
// end
var a = s.cfg.friends.includes((0, j.default)(e.get("mail").toLowerCase())),
...
}


在Valine 1.5.1版本实现QQ邮箱识别生成头像地址
https://boredliam.github.io/posts/24506.html
作者
BoredLiam
发布于
2024年7月11日
许可协议