EvanNotFound / hexo-theme-redefine

Simplicity in Speed, Purity in Design. Redefine Your Hexo Journey.
https://redefine.ohevan.com
GNU General Public License v3.0
1.48k stars 125 forks source link

[BUG] 豆瓣书单显示异常 #325

Closed stephen0316 closed 10 months ago

stephen0316 commented 10 months ago

提交 Issue 前检查清单

Bug 描述

首次进入书单/影单 页面无数据显示,每次需要手动刷新后才能正常显示

复现方法

点击“书单”进入页面,发现无数据展示

image image

预期结果

进入页面就能正常加载显示

截图

image image

电脑操作系统

macos

浏览器

Chrome

版本

120.0.6099.109

移动端设备

No response

移动端操作系统

No response

浏览器

No response

版本

No response

其他

No response

anzai249 commented 10 months ago

插件和swup不兼容 在script标签加个data-swup-reload-script应该就行了

bianyukun1213 commented 10 months ago

书单用的是某个 Hexo 插件插入的吗?能发一下链接吗?估计可以用 Filter 解决。

stephen0316 commented 10 months ago

对,插件链接如下:https://github.com/mythsman/hexo-douban

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年01月3日 15:16 | | 收件人 | @.> | | 抄送人 | stephen @.> , @.> | | 主题 | Re: [EvanNotFound/hexo-theme-redefine] [BUG] 豆瓣书单显示异常 (Issue #325) |

书单用的是某个 Hexo 插件插入的吗?能发一下链接吗?估计可以用 Filter 解决。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

bianyukun1213 commented 10 months ago

是分页脚本没有加载导致的。我写了个脚本可以修复这个问题。

  1. _config.yml 里把 doubanbuiltin 设为 true,让修复脚本可以在豆瓣插件生成页面之后修改它们;
  2. 运行 npm install cheerio 安装 cheerio;
  3. 在站点根目录下的 scripts 目录(没有就新建)下新建 filter-douban-fix.js(别的名称也可以);
  4. filter-douban-fix.js 里写如下代码,保存,重新生成站点。
const cheerio = require('cheerio');
const config = hexo.config;

let doubanPagePaths = [];
const doubanBookConfig = config.douban.book;
const doubanMovieConfig = config.douban.movie;
const doubanGameConfig = config.douban.game;
const doubanSongConfig = config.douban.song;
if (doubanBookConfig && doubanBookConfig.path)
    doubanPagePaths.push(doubanBookConfig.path);
if (doubanMovieConfig && doubanMovieConfig.path)
    doubanPagePaths.push(doubanMovieConfig.path);
if (doubanGameConfig && doubanGameConfig.path)
    doubanPagePaths.push(doubanGameConfig.path);
if (doubanSongConfig && doubanSongConfig.path)
    doubanPagePaths.push(doubanSongConfig.path);

hexo.extend.filter.register('after_render:html', (htmlSrc, local) => {
    if (doubanPagePaths.includes(local.page.path)) {
        let $ = cheerio.load(htmlSrc);
        $('.hexo-douban-pagination+script').attr('data-swup-reload-script', '');
        return $.html();
    }
    return htmlSrc;
}, 20);

cheerio 是用来选择 HTML 文件里分页脚本的 script 标签的,如果自己匹配、替换的话,就不用安装,运行应该也会快一点点。

bianyukun1213 commented 10 months ago

或者在 Redefine 配置里直接关闭单页模式 single_page 也可以,就不用再写脚本修了。

stephen0316 commented 10 months ago

解决了哥们儿,我直呼泪目,谢谢!

bianyukun1213 commented 10 months ago

解决了哥们儿,我直呼泪目,谢谢!

那可以关掉 issue 了。