Skip to main content

Command Palette

Search for a command to run...

让文章内的Emoji也动起来。

Published
1 min readView as Markdown
让文章内的Emoji也动起来。

让文章内的Emoji也动起来。

2024-08-29

#编码 , #分享

💡

不过这种方式似乎有被注入的风险,现在换成在SSG工具中进行替换,代码是同样的。

❤️❤️❤️

在前文 使用动态 Emoji 一文中提到了我是如何添加动态Emoji表情到Artalk中的。

但是,最近发现有一些朋友可能会直接通过输入法输入Emoji,而我的文章中也经常会使用Emoji,这导致了很多可以动的Emoji没有动起来。

所以又在这个上面拓展了一下,这次把文章内、Artalk评论用户自己输入的Emoji也全都做了替换。

构想的实现步骤如下

  • 通过js的正则获取页面内文章主体、Artalk评论元素中的Emoji字符
  • 使用这些字符去我的Emoji.json内匹配
  • 匹配到数据就替换成img标签

根据以上构思结合Kimi,得到了以下代码,代码功能和使用方式直接通过注释写在下方代码块中。

//定义一个替换函数,接受一个需要替换的Node数组 function replceEmoji(list){ // 定义获取Emoji的正则 const emojiRegex = /([\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2694-\u2697]|\uD83E[\uDD10-\uDD5D])/g;

// 使用fetch请求emoji.json fetch('/assets/emoji.json') .then(response => { // 首先检查响应状态 if (!response.ok) { throw new Error('Network response was not ok'); } // 解析JSON数据 return response.json(); }) .then(data => { // 将数据存到变量中 let emojis = data;

// 遍历传入的Node元素 list.forEach(function(el){ // 通过正则获取所有emoji let finds = el.innerHTML.match(emojiRegex); // 没找到数据则跳过本次循环 if(!finds){return} // 遍历所有找到的emoji finds.forEach(function(i){ // 看这个emoji是否有动态版本 let temp = emojis.items.find(item => item.icon === i)

if(temp){ // 如果有就替换成img标签 el.innerHTML = el.innerHTML.replaceAll(i,"") } })

}) }) .catch(error => { // 处理任何在请求过程中发生的错误 console.error('There was a problem with the fetch operation:', error); }); }

// 将所有文章进行替换 replceEmoji(document.querySelectorAll('.post'));

// artalk评论加载完毕的回调 artalk.on("list-loaded", function () { // 为所有评论替换emoji replceEmoji(document.querySelectorAll('.atk-body')); })

More from this blog

我的miniFlux主题

我的miniFlux主题 2024-10-06 #主题 , #分享 , #编码 最近Follow大火,虽然也在使用,不过我还是更喜欢miniFlux这种简单的阅读器。 之前从 yarr 切换到 miniflux 是因为 木木 大佬推荐的 miniflux 主题 Miniflux-Theme-Reeder,不过当时用了一段时间后发现各种不适,最后还是切换会默认主题,用了一段时间发现其实默认的miniflux已经非常好用了,不过需要做一点美化,所以简单做了一下调整,这里分享一下我的miniflux...

Oct 6, 20244 min read
我的miniFlux主题

MacType正确注册表全局热替换、渲染尝试

MacType正确注册表全局热替换、渲染尝试 2024-10-06 #Windows11 , #MacType , #折腾 前言 因为Windows系统字体渲染太垃圾,而我又没需求换4k,所以需要用到其他工具对字体进行渲染。而MacType自然是Windows平台的不二选择,我使用的时间估计已经有10年了把? 以前在XP、Win7上都能很完美的渲染,但是Windows10开始陆续出现了一些程序渲染不上的问题, 比如大部分UWP程序 而Chrome也因为安全策略更改也无法正常进行渲染,虽然百分...

Oct 6, 20243 min read
MacType正确注册表全局热替换、渲染尝试

两款CMS系统体验

两款CMS系统体验 2024-09-14 #编码 , #分享 , #工具箱 因为Ghost只提供文章的 HTML 代码,不提供 Markdown 的问题导致我曾经一度想更换CMS系统。但是将近800篇文章的转移工作十分麻烦,而且之前也尝试过用一些工具处理,无一都失败了,问题多是因为古早之前的很多文章存在格式问题,无法通过一些 HTML to Markdown 工具的转换规则,所以这个事也就一直没下定决定弄。 不过不影响我寻找下一位有动力让我这么做的CMS继任者。 最近发现了两款CMS工具,分别...

Sep 14, 20241 min read
两款CMS系统体验

如何快速解析HTML里的WikiLink?

如何快速解析HTML里的WikiLink? 2024-09-12 #编码 前几天在 你好Astro! 中提到想把Obsidian的文章集成在博客中来,并实现CMS和Obsidian之间通过Wikilink的互相引用。 不过因为Ghost的API只提供了文章的HTML字符串,Remark衍生的WikiLink插件肯定都是无法使用的,而且目前Github上能找到的WikiLink相关的案例基本上都是整对于Markdown语法去解析的,对于我来说基本上没什么参考价值。 所以我只能走另外的路子了,不过方...

Sep 12, 20242 min read
如何快速解析HTML里的WikiLink?

🤣JUSTFUN 周刊:第14期

🤣JUSTFUN 周刊:第14期 2024-09-12 #周刊 一图 骑行路上 1. 种的辣椒 2. 骑行路上 流水账 2024年9月2日:忽然对Astro的语法有了新的理解,也许我可以做到? 2024年9月2日:如果地球是个学校,各个国家是上学的孩子,那么老鹰就是校园霸凌的恶霸。 2024年9月2日:自由的含意是:我能自由的干你,你不能还手。 2024年9月2日:我真是个傻逼,之前吐槽说Ghost文章丢失了,刚刚忽然发现特么是我写成Page了,压根不在Posts列表里。 2024...

Sep 12, 20241 min read
🤣JUSTFUN 周刊:第14期

1900's Blog

10 posts