związku z tym, że w 2011 r. w ramach projektu
aby wysyłać wiadomości między kontekstami przeglądania, takimi jak okna, karty, ramki lub ramki iframe w tym samym pochodzeniu, możemy użyć Broadcast Channel API.
w tym artykule przyjrzymy się, jak używać go do wysyłania i odbierania wiadomości.
aby korzystać z API, musimy utworzyć BroadcastChannel
obiekt, który nasłuchuje bazowego kanału.
wtedy jesteśmy w stanie odbierać wszelkie wiadomości, które zostały do niego wysłane. Nie musimy utrzymywać odniesienia do ram iframe lub pracowników, z którymi chcemy się komunikować.
wszystko w obrębie tego samego źródła może subskrybować konkretny kanał, tworzącBroadcasChannel
, a następnie będą one miały komunikację w pełnym dupleksie między nimi wszystkimi.
możemy użyć go w następujący sposób:
const bc = new BroadcastChannel("test_channel");
bc.postMessage("test");
bc.onmessage = ev => {
console.log(ev.data);
};
bc.close();
w powyższym kodzie utworzyliśmyBroadcastChannel
instancję, a następnie wywołaliśmypostMessage
I ustawiliśmyonmessage
właściwość aby odsłuchać wiadomości, które zostały wysłane.
dostęp do danych jest możliwy przy pomocy właściwości data
.
możemy wtedy wywołać close
, aby zamknąć kanał, gdy skończymy.
możemy wysłać dowolny obiekt, a nie tylko łańcuch znaków.
Zdarzenie wiadomości
parametrev
w funkcji obsługionmessage
jest obiektemMessageEvent
.
posiada kilka właściwości tylko do odczytu, do których mamy dostęp:
-
data
-dane wysyłane przez emiter wiadomości. Będzie to zawartość, którą przekazaliśmy dopostMessage
-
origin
— łańcuch znaków reprezentujący początek wysyłanej wiadomości -
lastEventId
— łańcuch znaków reprezentujący unikalny identyfikator zdarzenia -
source
— aMessageEventSource
obiekt, (który może byćWindowProxy
MessagePort
lubServiceWorker
obiekt), reprezentujący emiter wiadomości -
ports
— tablicaMessagePort
obiekt reprezentujący porty powiązane z kanałem, przez który wysyłana jest wiadomość.
Obsługa błędów
aby obsługiwać błędy przy wysyłaniu wiadomości, możemy ustawić obsługę zdarzenia naonmessageerror
właściwość obiektu Broadcast Channel.
na przykład możemy napisać:
bc.onmessageerror = e => console.log(e);
wtedy możemy rejestrować wszelkie pojawiające się błędy.
nazwa
możemy uzyskać nazwę kanału z właściwościąname
.
aby to zrobić, możemy napisać:
const bc = new BroadcastChannel("test_channel");
console.log(bc.name);
wtedy widzimy, że nazwa naszego kanału nadawczego totest_channel
zconsole.log
.
wniosek
API kanału transmisji jest bardzo prostym API, które pozwala nam na komunikację międzysektorową.
może być używany do wykrywania działań użytkownika na innych kartach w tym samym środowisku pochodzenia witryny, na przykład gdy użytkownik loguje się na konto.
nie ma protokołu przesyłania wiadomości i różne dokumenty w różnych kontekstach muszą go zaimplementować.
również nie ma negocjacji i nie jest to wymagane przez specyfikację.