Тестирование BroadcastChannel в консоли инструментов разработчика Chrome не работает

Я тестирую работу широковещательного канала, и у меня возникли проблемы. Я открываю два хромированных окна и инструменты разработчика для каждого. на консоли пишу:

const z = new BroadcastChannel('blarg')
z.onmessage = function (ev) {console.log(ev)}

Я могу изучить z, и у него есть функция, сохраненная в опоре onmessage, так что все выглядит хорошо. Однако когда я тестирую:

z.postMessage('sweet')

в одной консоли ничего не отображается в другой. Я ожидал, что, поскольку оба хромированных окна подписаны на "blarg" BroadChannel и имеют функцию для консольного журнала отправленного сообщения, я бы увидел сообщение "sweet", которое будет отображаться на другой консоли, но ничего не происходит.

Итак, два вопроса:

Могу ли я так не тестировать BroadChannels в консоли разработчика?

Если да, то что мне не хватает в том, как работает broadcastChannel? BroadChannel кажется очень полезным, поэтому я пытаюсь с ним познакомиться. Спасибо за любую помощь или совет!

1 ответ

Это работает, если:

  1. общение происходит в одном и том же источнике
  2. имя канала одинаковое на обоих концах ( blargв вашем случае, но это также может быть "")
  3. вы не ожидаете получить сообщение, если вы являетесь отправителем

Когда ты говоришь

Я открываю два хромированных окна и инструменты разработчика для каждого.

позвонить им и. В номенклатуре и определяются как «контексты просмотра», и они также могут быть вкладками, фреймами или фреймами.

Следующий код является примером, удовлетворяющим условиям 1 и 2.

средства разработки:


средства разработки:

      location.href = 'https://example.com'
z = new BroadcastChannel('blarg')
z.onmessage = (ev) => { console.log(ev) }

Условие 1 также выполняется, когда контексты браузера (окна, вкладки, фреймы или фреймы) не «указывают» на какой-либо обычный URL-адрес (например, когда вы нажимаете CTRL+T, чтобы открыть новую вкладку). В этом случае происхождение имеет особое значение chrome://new-tab-page.

Сказал, что если вы отправляете сообщение из Aк , Bполучит сообщение и console.logЭто. То же самое относится и наоборот.

Другие вопросы по тегам