From 9cb6057f7f5b93324bfd10c6f21236b1375138bb Mon Sep 17 00:00:00 2001 From: Meg Boehlert Date: Thu, 2 Oct 2025 17:36:46 -0400 Subject: [PATCH] fix: prevent mem leaks by removing unloaded iframes from map --- .changeset/shy-carrots-deny.md | 5 +++++ packages/rrweb/src/record/iframe-manager.ts | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/shy-carrots-deny.md diff --git a/.changeset/shy-carrots-deny.md b/.changeset/shy-carrots-deny.md new file mode 100644 index 0000000000..db54207611 --- /dev/null +++ b/.changeset/shy-carrots-deny.md @@ -0,0 +1,5 @@ +--- +"rrweb": patch +--- + +fix potential mem leaks by deleting unloaded iframes from crossOriginIframeMap diff --git a/packages/rrweb/src/record/iframe-manager.ts b/packages/rrweb/src/record/iframe-manager.ts index 0451743619..e896f9a977 100644 --- a/packages/rrweb/src/record/iframe-manager.ts +++ b/packages/rrweb/src/record/iframe-manager.ts @@ -77,12 +77,16 @@ export class IframeManager { }); // Receive messages (events) coming from cross-origin iframes that are nested in this same-origin iframe. - if (this.recordCrossOriginIframes) + if (this.recordCrossOriginIframes) { iframeEl.contentWindow?.addEventListener( 'message', this.handleMessage.bind(this), ); + iframeEl.contentWindow?.addEventListener('pagehide', () => { + this.crossOriginIframeMap.delete(iframeEl.contentWindow!); + }); + } this.loadListener?.(iframeEl); if (