开发者

Javascript - DOMSubtreeModified event is not fired for my content in Firefox!

I am facing a weird behavior and I need some help..

I encounter a situation when I try开发者_开发问答 to recognize whether the content of the page was modified. I do it using

gBrowser.tabContainer.addEventListener("DOMSubtreeModified", function (e) { this.foo(e); }, false);

I also tried listening to document.DOMSubtreeModified and window.DOMSubtreeModified.

However, I sometimes get a situation in which the default\selected document is something that is irrelevant to me - perhaps some IFrame or a commercial built in or whatever, and bottom line my content is modified but when staring at the browser DOMSubtreeModified doesn't fire since it listens to a document\whatever that was indeed not modified...

Can you please help my understnad where's my problem? I need to create some event that recognizes any content modification (something like DOMSubtreeModified) that fires for every document, so that I could identify my relevant content and process it?

Thanks a lot,

Nili


You could explicitly listen for all DOM modification by adding a listener on the document object for each <iframe> element within the element you're interested in:

function listenForDomModified(node, listener) {
    node.addEventListener("DOMSubtreeModified", listener, false);
    var iframes = node.getElementsByTagName("iframe");
    for (var i = 0, len = iframes.length, doc; i < len; ++i) {
        // Catch and ignore errors caused by iframes from other domains
        try {
            doc = iframes[i].contentDocument || iframes[i].contentWindow.document;
            doc.addEventListener("DOMSubtreeModified", listener, false);
        } catch (ex) {}
    }
}

listenForDomModified(gBrowser.tabContainer);

Note that the DOMSubtreeModified event doesn't fire at all in Opera, so your code won't work in that browser.


               for FF 2, Safari, Opera 9.6+

               doc.addEventListener('DOMNodeInserted', callback, false);
               doc.addEventListener('DOMNodeRemoved', callback, false);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜