畅言PC版emoji显示
0 条评论畅言目前PC版的评论中无法正常显示emoji,大致搜了搜网上也没有相关的插件或者官方文档。大致的规划一下也就是写一段替换的代码,找到回调函数就完成了。本文在我也不知道愿不愿意透露姓名的陈大佬的指导下完成,我主要就是写了个测试环境,可以说非常愉快了。
本文主要列出替换的JS,简述了一下找回调函数的思路。
替换代码
畅言的emoji传到前台的数据是[emoji:d83cdfc6]
格式。
所以我们需要做的就是把这一段文字转化成Unicode字符,这是个很简单的操作。
1 | // 限定只更新畅言评论栏中的内容 |
替换思路
下面问题就在于能不能找到回调函数,在评论载入完成后调用替换。
目前暂时没有找出可用的回调,现在最简单的使用window.onload = function(){}
完成了替换。
所以目前的结果就是页面载入完成后替换,->这里<-是代码。
我发现upload/changyan.js中有changyan.api.ready
的函数。1
2
3
4window.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
28var 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")