BroadcastChannel.onmessage 无法在 Firefox 中工作

BroadcastChannel.onmessage not working in firefox

我需要在指向同一站点的同一浏览器的两个选项卡之间共享一些信息。我正在使用 BroadcastChannel.onmessage 事件处理程序,详情如下: https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel/onmessage

在发件人选项卡中 javascript 我定义的代码:

var bc = new BroadcastChannel('my_bc_channel');
bc.postMessage(i); //where i is simply the line number i want to share

在接收选项卡中:

var bc = new BroadcastChannel('my_bc_channel');
//then use this to receive the incoming messages:
bc.onmessage = function (ev) {
    last_line = ev.data
}

我的代码在 Chrome 中运行良好,但它在 Firefox(在 windows 下新安装的最新版本 70)中没有任何作用。我上面给出的 link 中的兼容性图表说它应该适用于 Firefox 版本 38。

问题是,我不确定如何调试它。我在控制台中没有任何错误消息。不知道是不是发件人代码什么都不发。但很明显,接收代码没有被触发,所以我猜 .onmessage 事件没有被检测到。如果消息已发送,我可以在 javascript 控制台的什么位置看到?

我打开了一个错误报告: https://bugzilla.mozilla.org/show_bug.cgi?id=1600512

当您将文件 本地 托管在您的硬盘上时,BroadcastChannel.onmessage 似乎无法正常工作,就像我在上面的示例中所做的那样。否则它会起作用。

可能是频道 "in the receiving tab" 仅在其他选项卡广播消息后设置了 onmessage 处理程序,消息丢失了。

您可能希望 "sending" 选项卡也设置一个消息处理程序,并等待另一个选项卡广播一条它准备好接收的消息,然后才开始广播。