From 64719456ab5e1382ebc22b6306cad1b0b4727aa6 Mon Sep 17 00:00:00 2001 From: Renzo Delfino <75499398+R-Delfino95@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:47:33 -0300 Subject: [PATCH 1/2] fix(mux-video): bail out of #requestLoad() when not yet connected --- packages/mux-video/src/base.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/mux-video/src/base.ts b/packages/mux-video/src/base.ts index 1c9ac9e0..fa5ec044 100644 --- a/packages/mux-video/src/base.ts +++ b/packages/mux-video/src/base.ts @@ -796,6 +796,14 @@ export class MuxVideoBaseElement extends CustomVideoElement implements IMuxVideo if (this.#loadRequested) return; await (this.#loadRequested = Promise.resolve()); this.#loadRequested = null; + // Defer load() until the element is connected to the document. A parent + // custom element (e.g. ) propagates `metadata-*` attributes via + // its own connectedCallback, which fires before this element's + // connectedCallback in tree order. Without this guard, an `await` between + // setAttribute and appendChild lets load() — and thus the first Mux Data + // beacon — fire with empty metadata. The connectedCallback re-invokes + // #requestLoad() once we're connected. + if (!this.isConnected) return; this.load(); } From 5ebec4a77ab9f0e63b51a414b52dab805d24d402 Mon Sep 17 00:00:00 2001 From: Renzo Delfino <75499398+R-Delfino95@users.noreply.github.com> Date: Wed, 29 Apr 2026 15:36:11 -0300 Subject: [PATCH 2/2] fix(mux-video): skip disable-tracking unload/reload when disconnected --- packages/mux-video/src/base.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/mux-video/src/base.ts b/packages/mux-video/src/base.ts index eac590aa..5ff151a9 100644 --- a/packages/mux-video/src/base.ts +++ b/packages/mux-video/src/base.ts @@ -959,6 +959,10 @@ export class MuxVideoBaseElement extends CustomVideoElement implements IMuxVideo break; case Attributes.DISABLE_TRACKING: { if (newValue == null || newValue !== oldValue) { + // Skip unload/reload when disconnected: #requestLoad() bails on !isConnected, + // so the .then() would fire without a corresponding load(). connectedCallback + // will trigger #requestLoad() with the updated tracking setting when connected. + if (!this.isConnected) break; const currentTime = this.currentTime; const paused = this.paused; this.unload();