Impl record iframe (#481)
* Impl record iframe * iframe observe * temp: add bundle file to git * update bundle * update with pick * update bundle * fix fragment map remove * feat: add an option to determine whether to pause CSS animation when playback is paused (#428) set pauseAnimation to true by default * fix: elements would lose some states like scroll position because of "virtual parent" optimization (#427) * fix: elements would lose some state like scroll position because of "virtual parent" optimization * refactor: the bugfix code bug: elements would lose some state like scroll position because of "virtual parent" optimization * fix: an error occured at applyMutation(remove nodes part) error message: Uncaught (in promise) DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node * pick fixes * revert ignore file * re-impl iframe record * re-impl iframe replay * code housekeeping * move multi layer dimension calculation to replay side * update test cases * teardown test server * upgrade rrweb-snapshot with iframe load timeout Co-authored-by: Lucky Feng <yun.feng@smartx.com>
This commit is contained in:
36
src/record/iframe-manager.ts
Normal file
36
src/record/iframe-manager.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { serializedNodeWithId, INode } from 'rrweb-snapshot';
|
||||
import { mutationCallBack } from '../types';
|
||||
|
||||
export class IframeManager {
|
||||
private iframes: WeakMap<HTMLIFrameElement, true> = new WeakMap();
|
||||
private mutationCb: mutationCallBack;
|
||||
private loadListener?: (iframeEl: HTMLIFrameElement) => unknown;
|
||||
|
||||
constructor(options: { mutationCb: mutationCallBack }) {
|
||||
this.mutationCb = options.mutationCb;
|
||||
}
|
||||
|
||||
public addIframe(iframeEl: HTMLIFrameElement) {
|
||||
this.iframes.set(iframeEl, true);
|
||||
}
|
||||
|
||||
public addLoadListener(cb: (iframeEl: HTMLIFrameElement) => unknown) {
|
||||
this.loadListener = cb;
|
||||
}
|
||||
|
||||
public attachIframe(iframeEl: INode, childSn: serializedNodeWithId) {
|
||||
this.mutationCb({
|
||||
adds: [
|
||||
{
|
||||
parentId: iframeEl.__sn.id,
|
||||
nextId: null,
|
||||
node: childSn,
|
||||
},
|
||||
],
|
||||
removes: [],
|
||||
texts: [],
|
||||
attributes: [],
|
||||
});
|
||||
this.loadListener?.((iframeEl as unknown) as HTMLIFrameElement);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user