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 (