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