我面临一种奇怪的行为,我需要一些帮助。

当我尝试识别页面的内容是否被修改时遇到一种情况。我用

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


我还尝试收听document.DOMSubtreeModified和window.DOMSubtreeModified。

但是,有时我会遇到以下情况:默认\选择的文档对我而言无关紧要-也许是一些IFrame或内置的广告或其他内容,并且底线是我的内容被修改了,但是当盯着浏览器DOMSubtreeModified时却没有因为它监听文档\而实际上未进行任何修改都会触发...

您能帮我的忙吗,我的问题在哪里?我需要创建一个事件,该事件可以识别对每个文档都触发的任何内容修改(例如DOMSubtreeModified),以便可以识别我的相关内容并进行处理?

非常感谢,

妮莉

最佳答案

您可以通过在文档对象上为您感兴趣的元素中的每个<iframe>元素添加一个侦听器来显式侦听所有DOM修改:

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);


请注意,DOMSubtreeModified事件在Opera中根本不会触发,因此您的代码将无法在该浏览器中运行。

07-24 09:37