可在用户输入评论时实时保存草稿至localStorage,关闭或刷新页面后自动恢复;需监听input事件、使用唯一键名(如"comment-draft-123")、防抖保存、加载时还原并清理已提交草稿。

可以在用户输入评论时实时保存草稿到 localStorage,关闭页面或刷新后仍能恢复未发布的文字。关键在于监听输入、合理命名键名、及时更新,并在加载时自动还原。
监听输入并自动保存草稿
给评论文本框(如 <textarea id="comment-input"></textarea>)绑定 input 事件,每次内容变化就存入 localStorage:
- 使用有意义的键名,例如
"comment-draft-123"(若关联某篇文章ID为123),避免多个页面草稿互相覆盖 - 保存前建议做简单判空,比如只在内容长度 > 0 时存储,减少无效写入
- 可加入防抖(debounce),比如延迟 500ms 再保存,避免高频触发影响性能
页面加载时自动恢复草稿
在 DOM 加载完成后(如 DOMContentLoaded 或 Vue/React 的 mounted 钩子中),读取对应键的值并填入文本框:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 先检查
localStorage.getItem(key)是否存在且非 null - 恢复后可选地添加视觉提示,例如在输入框上方显示“已恢复上次未发送的草稿”
- 注意:如果用户已成功提交评论,应在提交成功后调用
localStorage.removeItem(key)清除草稿
处理多评论区或动态场景
当一个页面有多个评论框(如嵌套回复、不同文章切换),需确保草稿隔离:
立即学习“前端免费学习笔记(深入)”;
- 根据上下文生成唯一键名,例如结合文章ID、用户ID、或评论目标ID:
`comment-draft-${postId}-${replyToId}` - 使用
dataset属性在 textarea 上标记所属上下文,便于统一管理:<textarea data-post-id="456"></textarea> - 切换文章时,先清除旧草稿再加载新草稿,避免残留
兼容性与边界注意事项
localStorage 在现代浏览器中支持良好,但需留意:
- 容量限制约 5–10MB(实际因浏览器而异),单条草稿一般远小于此,无需分片
- 隐私模式下可能被禁用,应包裹
try...catch,失败时不中断主流程 - 敏感内容(如含用户个人信息的未审核评论)不建议长期存储,可设有效期或用户主动清除


















