我面临一种奇怪的行为,我需要一些帮助。
当我尝试识别页面的内容是否被修改时遇到一种情况。我用
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中根本不会触发,因此您的代码将无法在该浏览器中运行。