![](/img/trans.png)
[英]Cross Domain settings not working in IE10 - works in Chrome and Mozilla
[英]removeEventListener not working in IE10, works in Chrome
我正在尝试使用MutationObserver创建一个迷你库,以检测DOM中的更改,还可以回退到旧版浏览器中的基本Mutation事件。 到目前为止,它很好,它可以在Chrome和Firefox中正常工作,我也测试了这些浏览器的后备功能-一切正常,但是当我测试IE 10时,它的表现却有所不同(出乎意料的...)
在此库中,您可以简单地调用:
domWatch(someDOMNode, callback)
回调得到一个参数-具有断开连接和观察方法的观察者,因此您可以在对节点进行一些更改时停止观察该节点,然后再次开始观察。
domWatch(document.querySelector('div'), function (obs) {
setTimeout(function () {
obs.disconnect();
$(obs.node).append('a');
obs.observe();
}, 1200);
});
在后备中,我使用突变事件和添加/删除事件侦听器。 我认为问题在于,在IE中并未真正删除该事件,它陷入了无限循环(我的代码位于setTimeout中,因此不会导致浏览器崩溃)。 由于某种原因,它可能认为this.realCallback
是不同的函数?
FallbackObserver.prototype.observe = function () {
this.node.addEventListener("DOMSubtreeModified", this.realCallback, true);
}
FallbackObserver.prototype.disconnect = function () {
this.node.removeEventListener("DOMSubtreeModified", this.realCallback, true);
}
我只用有问题的代码创建了一个小提琴,尝试在Chrome中运行它,然后在IE10中运行: http : //jsfiddle.net/Hb45w/2/
(完整的库Fiddle: http : //jsfiddle.net/x6W3p/ )
谢谢你的帮助!
设法解决它:
所有的浏览器都正确地删除和添加了事件-问题出在其他方面。
IE的实际问题可能是呈现引擎的某些方面-我断开了事件处理程序的连接,进行了更改并开始再次观察:
obs.disconnect();
$(obs.node).append('a');
obs.observe();
问题在于该事件显然是在 IE完成渲染之前附加的(可能是一些异步执行)。
改变中
FallbackObserver.prototype.observe = function () {
this.node.addEventListener("DOMSubtreeModified", this.realCallback, true);
}
至
FallbackObserver.prototype.observe = function () {
var that = this;
setTimeout(function () {
that.node.addEventListener("DOMSubtreeModified", that.realCallback, true);
}, 0);
}
做到了。 但是我不确定如果执行一些更复杂的DOM更改是否会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.