跨设备阅读进度同步必须依赖服务端或第三方平台,localStorage仅限同源同设备且无法自动同步。需通过API提交/拉取进度,UI需区分同步状态并处理离线与冲突。
阅读进度无法自动跨设备同步——HTML 本身不带状态存储和同步能力,必须靠 JavaScript + 后端服务或本地持久化策略组合实现。
很多开发者误以为 localStorage.setItem('readProgress', '123') 写进去,换台手机打开同一网页就能接着读。实际它只存在当前浏览器的当前域名下,完全不上传、不共享、不感知其他设备。
https://example.com/article.html,它们的 localStorage 是彻底隔离的QuotaExceededError,需 try/catch
有人尝试在写入时加时间戳,再轮询比对,但这不是真同步:
localStorage 的更新无法被其他设备感知,也无法合并冲突Date.now() 微秒级差异会导致覆盖逻辑混乱要么走服务端中转(推荐),要么用第三方平台托管状态:
立即学习“前端免费学习笔记(深入)”;
POST /api/progress 提交当前章节/滚动位置/时间戳,服务端存入用户关联的数据库;另一设备打开时发 GET /api/progress?articleId=123 拉取最新值ref('users/{uid}/progress/{articleId}').set(...) 写,监听 onValue 自动响应变化用户滑动到 85% 时,前端应立刻本地更新显示,但同步动作是异步的。必须给出明确反馈:
isStale: true,下次联网自动重试updatedAt 时间要用 Intl.DateTimeFormat 格式化,避免 new Date().toString() 输出英文月份真正的跨设备阅读进度同步,从来不是 HTML 能单独解决的事。关键不在怎么存,而在谁负责协调、谁保证最终一致、谁处理离线与冲突——这些都得由服务端兜底。前端唯一能做的,是把状态传准、反馈及时、降级合理。