有的没的
这个问题出现在这个博客基本搭建完成后,我发布第三篇文章时,解决的历程不算太困难,但是为了养成记录问题解决过程的习惯(这次就因为没养成习惯错过了截图),还是决定写下来,如果能帮到人就更好了。
问题详情
问题环境:hexo+GitHub+next主题+gitalk
问题描述:页面评论处出现Error: Validation Failed提示
问题分析
在查阅了互联网之后,最后在gitalk的GitHub的issues中得知主要原因在于gitalk将当前网址作为id属性,并在公开仓库创建相应label的issues实现存储评论,而GitHub限制label长度50从而使得部分文章导致无法创建。
解决方案
比较方便的解决方案主要有以下两种
方案一
方案描述
由于编码问题会在网址链接中出现16进制,使其超过长度限制导致无法创建,因此可以调用decodeURI函数,重新编码后用作id属性从而达到缩短的目的。不过该方案存在隐患,即当你的文章链接编码后仍超过限制就会失效,所以我最后没有采用这种方案。
方案实施
找到主题文件路径下的gitalk.swig,我的具体路径为:hexo_third-party,将找到对应代码,将id部分进行如下修改 1
2
3
4
5
6
7
8
9
10var gitalk = new Gitalk({
clientID: '{{ theme.gitalk.ClientID }}',
clientSecret: '{{ theme.gitalk.ClientSecret }}',
repo: '{{ theme.gitalk.repo }}',
owner: '{{ theme.gitalk.githubID }}',
admin: ['{{ theme.gitalk.adminUser }}'],
id: location.pathname,
id: md5(location.pathname),
distractionFreeMode: '{{ theme.gitalk.distractionFreeMode }}'
})
方案二
方案描述
同方案一,主要目的仍是控制id属性的长度,所以可以采用将location.pathname进行md5加密得到等长字符串作为id,这样就可以无视原本长度将id长度控制在50以内,从而解决问题,本博客最后采用了这个方案。
方案实施
添加md5实现
这里采用blueimp/JavaScript-MD5的代码,在该项目中找到js/md5.min.js。下载后放到主题目录下,我的具体路径为:hexo。 ##### 修改gitalk.swig 找到主题文件路径下的gitalk.swig,我的具体路径为:hexo_third-party。在该文件中加入md5.min.js引用,并对id部分进行修改,将location.pathname进行md5加密后作为id。修改后文件内容如下:
1 | {% if page.comments && theme.gitalk.enable %} |