fotó: Ricardo Gomez Angel az Unsplash-on üzenetek küldéséhez böngészési kontextusok között, például ablakok, fülek, keret vagy iframe-ek ugyanazon eredeten belül, használhatjuk a Broadcast csatorna API.
ebben a cikkben megnézzük, hogyan kell használni az üzenetek küldésére és fogadására.
az API használatához létre kell hoznunk egy BroadcastChannel
objektumot, amely a mögöttes csatornát hallgatja.
akkor képesek vagyunk fogadni minden üzenetet, hogy már írt rá. Nem kell hivatkoznunk az iframe-ekre vagy a munkavállalókra, akikkel kommunikálni akarunk.
bármi, ami ugyanazon az eredeten belül van, feliratkozhat egy adott csatornára egyBroadcasChannel
létrehozásával, majd teljes duplex kommunikációt folytathatnak közöttük.
a következőképpen használhatjuk:
const bc = new BroadcastChannel("test_channel");
bc.postMessage("test");
bc.onmessage = ev => {
console.log(ev.data);
};
bc.close();
a fenti kódban létrehoztunk egy BroadcastChannel
példányt, majd hívtuk postMessage
és beállítottuk a onmessage
tulajdonságot az elküldött üzenetek meghallgatása.
az adatokhoz a data
tulajdonság használatával lehet hozzáférni.
ezután felhívhatjuk a close
– t, hogy bezárjuk a csatornát, ha végeztünk.
bármilyen objektumot küldhetünk, nem csak egy karakterláncot.
üzenet Esemény
aev
paraméter aonmessage
kezelő aMessageEvent
objektum.
néhány csak olvasható tulajdonsággal rendelkezik, amelyekhez hozzáférhetünk:
data
-az üzenetkibocsátó által küldött adatok. Ez lesz az A tartalom, amelyet átadtunk postMessage
-
origin
— egy karakterlánc, amely a kibocsátott üzenet eredetét képviseli
-
lastEventId
— egy karakterlánc, amely az esemény egyedi azonosítóját képviseli
-
source
— a MessageEventSource
objektum, (amely lehet egy WindowProxy
MessagePort
, vagy ServiceWorker
objektum), amely az üzenet kibocsátóját képviseli
-
ports
— egy sor MessagePort
objektum, amely a portok, amelyek ahhoz a csatornához vannak társítva, amelyen keresztül az üzenet Küldésre kerül.
hibák kezelése
az üzenetek küldésével kapcsolatos hibák kezeléséhez beállíthatunk egy eseménykezelőt a Broadcast Channel objektumonmessageerror
tulajdonságára.
például írhatunk:
bc.onmessageerror = e => console.log(e);
akkor naplózhatunk minden felmerülő hibát.