You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BroadcastChannel API调用postMessage时关闭状态下报错不一致问题

BroadcastChannel API postMessage() 异常行为疑问

在使用BroadcastChannel API时发现,当通道已关闭但调用postMessage()时,并非总会抛出异常,具体分为两种情况:

1. 同一实例调用close()后调用postMessage():会抛出异常

代码示例:

const bc1 = new BroadcastChannel('foo');
const bc2 = new BroadcastChannel('foo');

bc1.postMessage('bar');

bc2.addEventListener('message', (event) => console.log(event.data));

setTimeout(() => {
  bc1.close(); // 从bc1实例调用close(),后续将在同一实例调用postMessage
}, 500);

setTimeout(() => {
  try {
    bc1.postMessage('bar2');
  } catch (error) {
    console.error('postMessage error', error);
  }
}, 1000);

执行后会抛出异常:

postMessage error
Error: Failed to execute 'postMessage' on 'BroadcastChannel': Channel is closed

2. 不同实例调用close()后调用postMessage():不会抛出异常

代码示例:

const bc1 = new BroadcastChannel('foo');
const bc2 = new BroadcastChannel('foo');

bc1.postMessage('bar');

bc2.addEventListener('message', (event) => console.log(event.data));

setTimeout(() => {
  bc2.close(); // 从bc2实例调用close(),后续在bc1实例调用postMessage
}, 500);

setTimeout(() => {
  try {
    bc1.postMessage('bar2');
  } catch (error) {
    console.error('postMessage error', error);
  }
}, 1000);

该代码不会抛出异常,个人认为此情况应抛出异常。

咨询问题:

  • 是否有办法检测第二种情况中通道是否已关闭?
  • 若这是bug,应在哪里提交工单?

内容的提问来源于stack exchange,提问作者Envil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:00:07