📢 新文章推送 · 每周更新优质内容 · 订阅更新 →
向下滚动
资源分享

博客新文章订阅通知功能上线(纯前端实现)

AI 智能总结

简介

经常有读者反馈:“不知道博客什么时候更新了”。为此,Lumin 主题新增了站内新文章订阅通知功能。

与传统的 RSS 订阅不同,这个功能不需要安装任何阅读器,也不需要配置邮件系统——当你再次访问博客时,工具栏上的铃铛图标会自动提示你有多少篇新文章

原理

 1你访问博客
 2 3JS 读取 /index.xml(Hugo 自动生成的 RSS Feed)
 4 5解析文章发布日期
 6 7对比 localStorage 中的「最后访问时间」
 8    ├─ 有新文章 → 铃铛按钮出现红色角标(如「3」)
 9    └─ 无新文章 → 保持静默
1011点击铃铛 → 展开面板展示最新文章列表
1213关闭面板 → 记录当前时间为「已读」

整个过程完全在浏览器端完成,不需要任何后端服务、数据库或第三方平台。

特点

零服务架构

  • ❌ 无需邮件服务器(SMTP)
  • ❌ 无需数据库
  • ❌ 无需第三方推送服务
  • ❌ 无需注册登录
  • ✅ 纯 JavaScript + localStorage
  • ✅ RSS Feed 由 Hugo 自动生成,零维护

用户体验

  • 角标提示:有新文章时铃铛按钮上显示红色数字,一眼可知更新数量
  • 下拉面板:点击铃铛展开面板,展示最近 10 篇文章标题与发布时间
  • 智能已读:关闭面板自动记录"已读"时间,下次只提示新更新的文章
  • 缓存优化:RSS 数据在本地缓存 15 分钟,避免每次页面加载都重复请求
  • 手动 RSS:面板底部提供 RSS 链接,习惯使用阅读器的用户仍可订阅
  • 暗色模式:完整适配主题暗色模式
  • 移动端适配:小屏设备自动缩小按钮和面板尺寸

技术细节

组件文件说明
HTML 结构layouts/partials/toolbar.html铃铛按钮 + 角标 + 下拉面板 + RSS 链接
核心逻辑assets/js/modules/subscription.jsRSS 拉取、XML 解析、时间对比、UI 渲染
样式assets/css/main.css按钮/面板完整样式,暗色模式适配
注册assets/js/main.jsES Module 导入

核心代码片段(约 60 行关键逻辑):

 1// 1. 从 localStorage 读取最后访问时间
 2var lastVisit = parseInt(localStorage.getItem('lumin_sub_lastvisit'), 10) || 0;
 3
 4// 2. 拉取 RSS 并解析
 5fetch('/index.xml')
 6  .then(function(r) { return r.text(); })
 7  .then(function(xmlStr) {
 8    var doc = new DOMParser().parseFromString(xmlStr, 'text/xml');
 9    var items = doc.querySelectorAll('item');
10    // 遍历文章,对比发布时间
11    var newCount = 0;
12    items.forEach(function(item) {
13      var ts = new Date(item.querySelector('pubDate').textContent).getTime();
14      if (ts > lastVisit) newCount++;
15    });
16    // 有更新 → 显示角标
17    if (newCount > 0) badge.textContent = newCount;
18  });

使用方式

无需任何配置,功能在部署后自动生效:

  1. 正常访问博客 → 铃铛按钮出现在右侧工具栏(火箭上方)
  2. 博客有新文章 → 再次访问时铃铛显示角标
  3. 点击铃铛 → 查看新文章列表
  4. 关闭面板 → 自动标记已读

提示:如果一直看不到角标,说明你已经读完了所有文章,或者这是你第一次访问本博客。

隐私说明

  • 所有数据存储在浏览器本地(localStorage)
  • 不发送任何网络请求(除 RSS Feed 同源请求外)
  • 不追踪用户行为
  • 不设 Cookie

相关链接

15 / 16
版权声明

本文作者 Lumin

本文链接 https://www.zhengquan.xyz/share/subscription-feature/

许可协议 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

请作者喝杯咖啡 ☕

  • 微信打赏
    微信支付
  • 支付宝打赏
    支付宝
点击按钮查看打赏二维码
🎁 推荐工具
试试这些实用在线工具,提升工作效率
前往工具集 →

留言评论

期待你的想法

评论加载中