惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
P
Palo Alto Networks Blog
P
Proofpoint News Feed
AI
AI
Help Net Security
Help Net Security
S
Securelist
T
Troy Hunt's Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
S
Security Affairs
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
T
Tenable Blog
H
Help Net Security
NISL@THU
NISL@THU
F
Fortinet All Blogs
博客园_首页
G
GRAHAM CLULEY
L
LINUX DO - 最新话题
P
Privacy International News Feed
G
Google Developers Blog
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
量子位
C
Cyber Attacks, Cyber Crime and Cyber Security
Forbes - Security
Forbes - Security
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
D
Docker
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog

Roy的个人站

天天在网站上填材料?简单配置,让AI替你操作 | Roy的个人站 只是组件 使用手册 | Roy的个人站 IOS常用URL Scheme整理 | Roy的个人站 Anchor 专业版手册 | Roy的个人站 MacOS在NSImage里提供了哪些系统图标 | Roy的个人站 即刻寻找果果活动技术向剧透收集 | Roy的个人站 借助amis通过json构建前端页面 | Roy的个人站 浅析Pandownload作者可能面临的责任 | Roy的个人站 实现可被链接调用的IOS应用 | Roy的个人站 避免docker挂载时产生root权限文件 | Roy的个人站 一些有关幽默的理论 | Roy的个人站 手绘一个苹果手表的动图表盘 | Roy的个人站 用markdown编写man文档 | Roy的个人站 简化scp命令文件上传下载 | Roy的个人站 PPT中使用ECharts实现可拖拽关系图 | Roy的个人站 博客代码框设置换行 | Roy的个人站 畅言更名相关商标权的探究 | Roy的个人站 畅言评论插件优化 | Roy的个人站
畅言PC版emoji显示 | Roy的个人站
2019-05-23 · via Roy的个人站

畅言目前PC版的评论中无法正常显示emoji,大致搜了搜网上也没有相关的插件或者官方文档。大致的规划一下也就是写一段替换的代码,找到回调函数就完成了。本文在我也不知道愿不愿意透露姓名的陈大佬的指导下完成,我主要就是写了个测试环境,可以说非常愉快了。

本文主要列出替换的JS,简述了一下找回调函数的思路。

替换代码

畅言的emoji传到前台的数据是[emoji:d83cdfc6]格式。
所以我们需要做的就是把这一段文字转化成Unicode字符,这是个很简单的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

divList = document.getElementById("SOHUCS").getElementsByClassName("wrap-word-gw");
for (var divIndex = 0; divIndex < divList.length; divIndex++) {
div = divList[divIndex]

for (var emoji, regex = /\[emoji:(.*?)\]/g, l = []; null != (n = regex.exec(div.innerHTML)); ) {
f = "\\u" + n[1].substring(0, n[1].length / 2),
s = "\\u" + n[1].substring(n[1].length / 2, n[1].length),
emoji = f + s,
emoji = unescape(emoji.replace(/\\u/g, "%u"));

l.push(emoji)
}

for (var i = 0; i < l.length; i++) {
div.innerHTML = div.innerHTML.replace(/\[emoji:(.*?)\]/, l[i])
}
}

替换思路

下面问题就在于能不能找到回调函数,在评论载入完成后调用替换。
目前暂时没有找出可用的回调,现在最简单的使用window.onload = function(){}完成了替换。
所以目前的结果就是页面载入完成后替换,->这里<-是代码。

我发现upload/changyan.js中有changyan.api.ready的函数。

1
2
3
4
window.changyan.api.ready = function(fn) {
window.changyan.api.tmpHandles = window.changyan.api.tmpHandles || [];
window.changyan.api.tmpHandles.push(fn);
};

之后src/adapter.min.js中通过runReadyFn完成回调。

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
var runReadyFn = function() {
if (window.changyan.tmpHandles && window.changyan.tmpHandles.length) {
for (var i = 0; i < window.changyan.tmpHandles.length; i++) {
var _fn = window.changyan.tmpHandles[i];
_fn && _fn();
}
window.changyan.tmpHandles = [];
}
};
window.changyan.rendered = false;
$$event.listen("changyan:cmt-header:header-rendered", function() {
if (!window.changyan.rendered) {
runReadyFn();
window.changyan.rendered = true;
}
});
$$event.listen("changyan:mobile-cmt-list:list-render", function() {
if (!window.changyan.rendered) {
runReadyFn();
window.changyan.rendered = true;
}
});
$$event.listen("changyan:cmt-box:box-render", function() {
if (!window.changyan.rendered) {
runReadyFn();
window.changyan.rendered = true;
}
});

一点吐槽

在研究代码的过程当中,发现代码中还有残留下来的内容。

比如extensions/longloop.js中的:

1
e("C:/Users/Yaodoggy/Documents/Program Files/Wamp/wamp/www-mdevp/mdevp/cache/www/longloop/longloop.js")