Тестирование 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 ответ
Это работает, если:
- общение происходит в одном и том же источнике
- имя канала одинаковое на обоих концах (
blarg
в вашем случае, но это также может быть""
) - вы не ожидаете получить сообщение, если вы являетесь отправителем
Когда ты говоришь
Я открываю два хромированных окна и инструменты разработчика для каждого.
позвонить им и. В номенклатуре и определяются как «контексты просмотра», и они также могут быть вкладками, фреймами или фреймами.
Следующий код является примером, удовлетворяющим условиям 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
Это. То же самое относится и наоборот.