stevessr / 博客技术改进:SPA 适配、暗色模式修复与宽屏模式上线

Created Sat, 18 Apr 2026 18:00:00 +0800 Modified Wed, 13 May 2026 11:28:35 +0000

在追求极致阅读体验的路上,细节决定成败。最近我对博客进行了一系列深度优化,解决了困扰已久的 SPA(单页应用)下评论区不加载、暗色模式不跟随、以及大屏显示效果不佳等问题。

1. 攻克 SPA 下的“评论区消失术”

由于博客采用了 Swup.js 来实现无刷新页面切换(SPA 风格),常规的 Waline 初始化脚本在页面跳转后会失效。

解决方案:

  • 全局生命周期管理:将 Waline 的初始化逻辑 initWaline 提升至 extended_head.html 中,使其成为全局可调用的持久化函数。
  • 挂钩 Swup 钩子:利用 Swup 的 content:replace 事件,在每次页面内容替换后强制重新触发 Waline 初始化。
  • 优雅降级与清理:在重绘前增加了 destroy() 检查和 try-catch 保护,防止因 DOM 节点提前移除导致的 JavaScript 报错。

2. 完美的暗色模式适配

修复了 Waline 编辑器在切换到暗色主题后依然“一片惨白”的视觉 Bug。

  • CSS 变量同步:手动将 Waline 的内部变量(如 --waline-bg-color)映射到 GitHub 主题的颜色体系中。
  • 强制背景覆盖:通过 !important 规则确保在 data-color-mode="dark" 激活时,评论框背景能完美融入深色背景。
  • 动态监听:配置 Waline 的 dark 属性指向 html[data-color-mode="dark"] 选择器,实现主题的毫秒级同步切换。

3. “宽屏模式”正式上线

针对现代大尺寸显示器,增加了宽屏/窄屏切换功能。

  • 一键展开:在 Header 顶部增加了全新的布局切换按钮。
  • 全方位拉伸:开启宽屏模式后,不仅文章主体容器(container-lg)会扩展至 95% 宽度,下方的 Waline 评论区也会同步拉伸,提供更开阔的阅读和讨论视野。
  • 状态持久化:使用 localStorage 记录用户的偏好,即使刷新页面或在 SPA 间跳转,布局状态也能保持一致。

4. 脚注渲染支持 (^[…])

为了方便引用和补充说明,现在支持标准的行内脚注语法。

  • 语法^[这是脚注内容]
  • 自动处理:通过自定义脚本,系统会自动识别文章中的脚注标记,将其转换为上标数字,并在文末自动生成带有“回跳”链接的脚注列表。

5. 其他稳定性修复

  • Service Worker 优化:修复了 SW 尝试缓存 chrome-extension 协议导致的控制台报错。
  • 图片 404 修复:将文章图片路径改为绝对路径,确保在 SPA 复杂的路由跳转下图片依然能准确加载。
  • MathJax 健壮性:增强了公式渲染脚本的判断逻辑,解决了跳转时的 TypeError 异常。

希望这些改进能让大家的阅读体验更加丝滑!如有任何建议,欢迎在(终于修好的)评论区留言。