fix: bug when handling shadow doms (#1041)
On the website https://mixpanel.com/project/2195193/view/139237/app/dashboards#id=3679845, the bottom chart makes the recorder crash (infinite loop)
This commit is contained in:
@@ -393,15 +393,20 @@ export default class MutationBuffer {
|
||||
}
|
||||
// nextId !== -1 && parentId === -1 This branch can happen if the node is the child of shadow root
|
||||
else {
|
||||
const nodeInShadowDom = _node.value;
|
||||
// Get the host of the shadow dom and treat it as parent node.
|
||||
const shadowHost: Element | null = nodeInShadowDom.getRootNode
|
||||
? (nodeInShadowDom.getRootNode() as ShadowRoot)?.host
|
||||
: null;
|
||||
const parentId = this.mirror.getId(shadowHost);
|
||||
if (parentId !== -1) {
|
||||
node = _node;
|
||||
break;
|
||||
const unhandledNode = _node.value;
|
||||
// If the node is the direct child of a shadow root, we treat the shadow host as its parent node.
|
||||
if (
|
||||
unhandledNode.parentNode &&
|
||||
unhandledNode.parentNode.nodeType ===
|
||||
Node.DOCUMENT_FRAGMENT_NODE
|
||||
) {
|
||||
const shadowHost = (unhandledNode.parentNode as ShadowRoot)
|
||||
.host;
|
||||
const parentId = this.mirror.getId(shadowHost);
|
||||
if (parentId !== -1) {
|
||||
node = _node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user