D0n9X1n / hexo-blog-encrypt

Yet, just another hexo plugin for security.
https://www.npmjs.com/package/hexo-blog-encrypt
MIT License
971 stars 101 forks source link

[bug] 输入密码按回车没反应(hexo5.0后使用注入器改变post-content标签与hexo-blog-encrypt冲突) #180

Closed junqi-lu closed 2 years ago

junqi-lu commented 2 years ago

Issue

为了让博客新增时效性提醒, 我参考了通过 Hexo 5 注入器为主题添加新功能, 在body-end注入了以下脚本.

(function() {
  var times = document.getElementsByTagName('time');
  if (times.length === 0) { return; }
  var posts = document.getElementsByClassName('post-content');
  if (posts.length === 0) { return; }

  var pubTime = new Date(times[0].dateTime);  /* 文章发布时间戳 */
  var now = Date.now()  /* 当前时间戳 */
  var interval = parseInt(now - pubTime)
  /* 发布时间超过指定时间(毫秒) */
  if (interval > 3600*24*100*1000){
    var days = parseInt(interval / 86400000)
    posts[0].innerHTML = '<div class="note note-warning" style="font-size:0.9rem"><p>' +
      '<div class="h6">文章时效性提示</div><p>这是一篇发布于 ' + days + ' 天前的文章,部分信息可能已发生改变,请注意甄别。' +
      '</p></p></div>' + posts[0].innerHTML;
  }
})();

Expected Behavior

加密文章既能正常解密, 同时也能在文章顶部显示时效性提醒.

Actual Behavior

在显示文章时效性提醒时, 在加密文章输入密码后按回车没有反应.

控制台没有报错. 更换浏览器无果.

但是官方测试样例可以正常解锁.

Temporary solution

废了老半天劲, 把bug定位到了post-centent标签上, 改变了innerHTML后与加密插件有所冲突.

目前的解决方案是时效性提醒放到post-header标签上.

(function () {
    var times = document.getElementsByTagName('time');
    if (times.length === 0 || times.length > 2) { return; }
    var header = document.getElementsByClassName('post-header');
    if (header.length === 0) { return; }

    var pubTime = new Date(times[0].dateTime);  /* 文章发布时间戳 */
    var now = Date.now()  /* 当前时间戳 */
    var interval = parseInt(now - pubTime)
    /* 发布时间超过指定时间(毫秒) */
    if (interval > 3600 * 24 * 100 * 1000) {
        var days = parseInt(interval / 86400000)
        header[0].innerHTML =
            '<div class="note note-warning" style="font-size:0.9rem">'
            + '<p>'
            + '<div class="h6">文章时效性提示</div>'
            + '<p>这是一篇发布于 ' + days + ' 天前的文章,部分信息可能已发生改变,请注意甄别。</p>'
            + '</p>'
            + '</div>' + header[0].innerHTML;
    }
})();

老实说找出bug后也不知道再提issue是否合适. 不管怎样, 这篇issue就给后来人当作参考吧.

Specifications

部分版本信息如下

NexT version: 8.7.1
hexo-blog-encrypt: 3.1.6
hexo: 5.4.0
hexo-cli: 4.3.0
os: darwin 20.6.0 11.5.2

node: 16.8.0
v8: 9.2.230.21-node.20
D0n9X1n commented 2 years ago

Closed and Pinned. Thanks.