摘要
- W3C 2013 年的公开讨论提出,向同源的多个运行环境广播消息;2014 年的记录要求把 worker 纳入,2015 年的邮件讨论显示实现工作已在进行。
- 现行 HTML 标准让浏览器按频道名和存储键寻找其他可接收者,序列化消息并排队投递;每个页面自己决定收到后怎么做。
读者在 A 标签页点了退出。B 标签页还停在收藏文章列表,C 标签页的账户设置仍显示登录状态。这三个页面像坐在同一张办公桌前,却各写各的值班日志。它们当然可以反复向服务器询问,但在一个窗口刚刚知道答案时,桌面上的同事何必再各自打电话?浏览器已经知道哪些窗口开着,只差一套传话规矩。
W3C 于 2013 年开启的公开议题记录了规矩成形的过程。讨论中有人提出,创建一个带频道名的对象,再用 postMessage() 发话;同源且使用同名频道的其他对象收到事件。具体接口当时仍在讨论,核心安排已很清楚:窗口之间无须先交换彼此的地址,也能参加同一场对话。
电话随后接到后台。2014 年 1 月的另一项 W3C 议题要求 worker 也能使用 BroadcastChannel;该记录在 6 月注明,HTML 工作中完成了相应修改。网页的后台工作者有自己的值班时间,让它们加入频道,窗口与后台便能使用同一套传话方式。
2015 年 1 月的 WHATWG 公开邮件讨论了一项即将进入 Firefox Nightly 的实现,并指向 HTML 规范。同年 10 月的 W3C HTML 5.1 工作草案索引也列出 BroadcastChannel 接口,链接到 WHATWG 的定义。公开记录里能看到设计从讨论桌走向实现;读者只需享受标签页不再互相装聋的结果。
现行 HTML 标准把送信路线写得很细。频道有名字。发送者发布一条消息后,浏览器先序列化内容,再找出名称相同、存储键相同且处于可接收状态的频道,排除发送对象,为其余对象逐一排队触发 message 事件。窗口的文档须仍然活跃,worker 也须满足自己的接收条件。隔着不同存储分区,即使门牌看着熟悉,电话线也不会接通。
标准直接用跨标签页退出登录举例:一个窗口发出通知,另一个窗口更新显示。频道传达的是“发生了什么”;清理账户状态、改变界面仍由网站自己的代码完成。改主题颜色、刷新多个视图里的任务状态,也能走相似的路线。浏览器当总机,各页面当知道自己业务的值班员。
最后还得记得挂机。标准提醒,带着消息监听器的频道对象可能一直存活,占用资源;用完应关闭。内线电话让协作轻松,却不负责帮编辑部收拾每一张桌子。好在它解决了最尴尬的问题:同一个读者已经走了,隔壁标签页终于不会继续喊他回来喝茶。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance





