← 返回文章列表

少一点依赖,多一点 JavaScript

主题切换和站内搜索不一定需要完整的前端框架。让静态网页只加载真正需要的交互代码。

一个以阅读为核心的博客,绝大部分内容没有必要等到 JavaScript 执行完才出现。这个示例项目把文章生成成 HTML,再用少量脚本补充交互。

主题切换

主题切换只需要三个步骤:

  1. 给根元素设置 data-theme。
  2. 使用 CSS 变量定义两套颜色。
  3. 用 localStorage 保存读者的选择。
const root = document.documentElement;
root.dataset.theme = 'dark';
try {
  localStorage.setItem('blog-theme', 'dark');
} catch {
  // 隐私设置可能禁用存储,主题仍可以在当前页面切换。
}

初始化脚本放在页面头部,可以减少深色主题的闪烁。如果没有手动选择,就跟随系统偏好。

静态搜索索引

在构建时,把已发布文章的标题、摘要、标签和地址输出为 JSON。读者真正发起搜索时,浏览器才加载这个索引。

搜索结果使用 DOM API 和 textContent 渲染,不把搜索关键词或文章元数据当成 HTML 注入。

当前搜索范围

这个博客的搜索匹配标题、摘要和标签,不是正文全文搜索。对于大量文章,可以后续接入 Pagefind 等静态全文搜索工具。

渐进增强

关闭 JavaScript,读者依然可以浏览文章、标签、归档和 RSS。只有搜索与手动主题切换需要脚本。

优先保证内容可读,再增加体验上的便利,通常比给每个页面装上复杂运行时更适合博客。