HTML文本域本身不支持多端同步,但可通过localStorage+服务端中转、BroadcastChannel实现同源多标签页同步、IndexedDB+WebSocket实现离线优先协同三种方案达成草稿实时同步效果。
HTML文本域本身不支持多端同步,但结合浏览器存储机制和跨设备通信方案,可以实现类似“草稿箱”的实时同步效果。核心思路是:用户输入时自动保存到持久化存储,再通过服务端或广播机制将变更推送到其他已登录终端。
这是最常用且兼容性好的方式,适合大多数 Web 应用:
input 事件),立即将当前值连同用户 ID、表单标识(如 formId)一起加密后存入 localStorage
/api/draft/save)发送异步请求,把草稿内容、时间戳、设备信息一并提交并落库/api/draft/latest?userId=xxx&formId=yyy 拉取最新草稿,并填充到 <textarea> 中如果目标是同一浏览器多个标签页之间的即时联动(比如写一半切去查资料,回来继续),无需后端参与:
const channel = new BroadcastChannel('draft-sync')
textarea 的 input 事件,触发时调用 channel.postMessage({ formId: 'contact', value: textarea.value })
message 事件,收到后判断 formId 是否匹配,匹配则更新本地 <textarea> 的 value 属性适用于对可靠性要求高、常有弱网或离线场景的产品(如笔记类 App):
IndexedDB(本地数据库),再尝试通过 WebSocket 推送到服务端revisionId 和 timestamp,多端编辑冲突时按时间戳合并,或提示“他人已修改,是否保留当前版本?”同步功能容易忽略但影响体验的关键点:
input 事件里直接调用 fetch 频繁上传——改用节流 + 变更检测(只在内容真正变化时才触发)beforeunload 事件兜底保存一次,防止意外丢失BroadcastChannel 支持有限,多端同步必须依赖服务端中转,不能仅靠前端 API