MessageChannel

Port API

The queue starts disabled. onmessage opens it. addEventListener needs start(). close() disentangles.

port.postMessage(data);          // no targetOrigin
port.onmessage = onMsg;          // implies start()
port.addEventListener("message", onMsg);
port.start();                    // required with addEventListener
port.close();                    // disentangle; later posts drop
Queue Afterward
Born Disabled. Posts wait. Not dropped on the floor
onmessage = Enabled (implied start) Stays enabled
start() Enabled Stays enabled. Call again is a no-op
close() Not a pause Pair gone. Posts find no twin
Extra pipe Close both handles you hold Worker and implicit port stay

Spec: HTML §9.4.1.1 · §9.4.4 · §9.4.5