From a86361c3cb57e4d618929e7d0062ae99741fbe6f Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Fri, 4 Apr 2025 19:59:21 +0100 Subject: [PATCH 1/2] Squarespace dispatches media events on non-media elements. These cause an error upon replay. Found in the wild at https://static1.squarespace.com/static/vta/5c5a519771c10ba3470d8101/scripts/416.b27e99ad04cb589ced2b.js --- packages/rrweb/src/record/observer.ts | 1 + packages/rrweb/src/replay/media/index.ts | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/rrweb/src/record/observer.ts b/packages/rrweb/src/record/observer.ts index 8326d79651..c3415fc765 100644 --- a/packages/rrweb/src/record/observer.ts +++ b/packages/rrweb/src/record/observer.ts @@ -1027,6 +1027,7 @@ function initMediaInteractionObserver({ const target = getEventTarget(event); if ( !target || + !(target instanceof HTMLMediaElement) || isBlocked(target as Node, blockClass, blockSelector, true) ) { return; diff --git a/packages/rrweb/src/replay/media/index.ts b/packages/rrweb/src/replay/media/index.ts index ef577cafa0..075df87d7d 100644 --- a/packages/rrweb/src/replay/media/index.ts +++ b/packages/rrweb/src/replay/media/index.ts @@ -54,7 +54,14 @@ export class MediaManager { this.mediaMap.forEach((_mediaState, target) => { this.syncTargetWithState(target); if (options.pause) { - target.pause(); + try { + target.pause(); + } catch (error) { + this.warn( + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions + `Failed to sync media element: ${error.message || error}`, + ); + } } }); } @@ -104,7 +111,14 @@ export class MediaManager { target.currentTime = seekToTime; } else { - target.pause(); + try { + target.pause(); + } catch (error) { + this.warn( + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions + `Failed to pause during seek: ${error.message || error}`, + ); + } target.currentTime = mediaState.currentTimeAtLastInteraction; } } From 01c999e12a5b8dab58b6d56673f923504a08fb31 Mon Sep 17 00:00:00 2001 From: Eoghan Murray Date: Fri, 4 Apr 2025 20:11:19 +0100 Subject: [PATCH 2/2] Create gorgeous-eels-rescue.md --- .changeset/gorgeous-eels-rescue.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/gorgeous-eels-rescue.md diff --git a/.changeset/gorgeous-eels-rescue.md b/.changeset/gorgeous-eels-rescue.md new file mode 100644 index 0000000000..da921a4e06 --- /dev/null +++ b/.changeset/gorgeous-eels-rescue.md @@ -0,0 +1,5 @@ +--- +"rrweb": patch +--- + +Safer Media play/pause when target is not in fact a MediaElement