gitment
gitment copied to clipboard
Validation Failed ID长度问题建议
现版本默认的 id: window.location.pathname 还是有可能造成长度过长导致初始化Validation Failed 希望可以更改一个默认值,利用MD5之类的啥玩意把路径处理成较短的字符串
可以通过改地址的输出格式,并把id改为window.location.pathname来缩短labels的长度,详细的可以看我的博客:http://www.xjdesyxx.top/2018/02/07/errsln/
@xjzsq 只要不处理ID字符串或者更改第三方ID长度限制位数,就仍会出现这个问题 不考虑第三方的话,只有压缩ID字段才算稳定解决方案吧,个人拙见
@cfmy 这倒是,用这我种方法,如果前面的地址特别长或者subtitle写的很长的话,也会出现问题,不过应该不会有人申请那么长的域名吧...
@xjzsq 真的是大牛 !!
@xjzsq 感谢!!
其实我只是蒟蒻,我连HTML都不会写,而且上面的想法是我找了一天的解决方案突然想到的...
安装这个插件,https://github.com/rozbo/hexo-abbrlink 可以将链接生成,随机数。。嗯,不用去修改写好的文章了.
@zhangcaocao 大佬!
@xjzsq 哈哈哈,我也是在搜索了才好久发现的喃。。
出现 Error:validation failed
我想到一个更好的方法,用文章的时间,这样长度是保证在50个字符内,完美解决! id: '<%= page.date %>'
具体原因可以查看我博客:https://ihtcboy.com/2018/02/25/2018-02-25_Gitment评论功能接入踩坑教程/
@zhangcaocao 感谢,已经解决。
在 themes\next\layout_third-party\comments 目录下修改gitments.swig,找到以下代码修改
function renderGitment(){
var gitment = new {{CommentsClass}}({
- id: window.location.pathname,
+ id: '{{ page.date }}',
owner: '{{ theme.gitment.github_user }}',
repo: '{{ theme.gitment.github_repo }}',
{% if theme.gitment.mint %}
lang: "{{ theme.gitment.language }}" || navigator.language || navigator.systemLanguage || navigator.userLanguage,
{% endif %}
之后重新hexo g -d就ok了,请保证没有浏览器缓存。
@Johnny Law 如果改为用time为id,那么以前的文章的评论全部重新inital,这个请注意啦!
@iHTCboy ,好的,其实在理论上只需要在id上面再做一点trick比如说添加一个? :
语句来判断一次window.location.pathname.length
是否小于50,只把过长的id用time来表示,应该可以做到向前兼容。
eg.
id: (window.location.pathname.length < 50) ? window.location.pathname : "{{ page.date }}"
缺点应该就是id的标准会不统一但是理论上还是可以保持唯一性。鄙人使用 python 的 Jinja2 模板,以上的代码亲测可用。
@longjj 感谢!方法不错! 如果有太多文章或者有评论的文章,大家可以试试啊!
@iHTCboy 也是个不错的方法! 不过试想一下如果同1s有两篇文章就有意思了...(当然没人会蠢到那么做,除了我233)
@xjzsq 哈哈,同1s你能写2篇文章,我服!-x-
我这样做的结果,是同一个评论在所有文章后面都出现?怎么处理?
@iHTCboy 按你的方法,搞定了。再判断下文章时间,兼容以前的评论,完美😎
<script>
var page_date = '{{ page.date }}';
var id = window.location.href;
if(page_date > '2018-04-31 00:00:00 +0000'){ // 兼容以前的评论
id = page_date;
}
var gitment = new Gitment({
id: id, // 可选。默认为 location.href
owner: '',
repo: '',
oauth: {
client_id: '',
client_secret: '',
},
});
gitment.render('container');
</script>
我是这么做的(博客用的jekyll)
<script>
var str='{{ page.date | date: "%Y-%m-%d" }} {{ page.title }}';
var id = str;
if(str.length>=45){
id=str.substring(0,45)+"...";
}
var gitment = new Gitment({
id: id,
owner: 'xxx',
repo: 'xxx',
oauth: {
client_id: 'xxx',
client_secret: 'xxx',
},
})
gitment.render('container')
</script>