Chrome 57 版本 MutationObserver 报错
问题描述
在 Chrome 57
版本下,Platform
加载 App
时报错: MutationObserver observer
的第一个参数节点不是 Node。
问题原因
该问题产生的原因是 document
被重写为 ProxyDocument
导致的,App
内部访问到的 document
实际上是一个 Proxy
对象,导致 observer
函数访问的一个参数不是 Node
节点,从而报错。
解决方案
将 MutationObserver.prototype.observer
进行重写,判断监听的元素是否是 proxyDocument
。如果是的话,将其代理到 nativeDocument
。
typescript
const nativeMutationObserverObserveEn = MutationObserver.prototype.observe;
const observe = function observe(this: MutationObserver, target: Node | typeof Proxy, options: MutationObserverInit) {
const realTarget = isProxyDocument(target) ? globalEnv.rawDocument : target;
return nativeMutationObserverObserveEn.call(this, realTarget, options);
};
MutationObserver.prototype.observe = observe;