![](/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.