我面临一种奇怪的行为,我需要一些帮助......
当我尝试识别页面内容是否被修改时,我遇到了一种情况。我是用
做的gBrowser.tabContainer.addEventListener("DOMSubtreeModified", function (e) { this.foo(e); }, false);
我也尝试过收听document.DOMSubtreeModified和window.DOMSubtreeModified。
但是,我有时会遇到这样一种情况:默认\选择的文档与我无关 - 可能是一些IFrame或商业内置或其他什么,底线我的内容被修改但是当盯着浏览器DOMSubtreeModified因为它听取了一个文件\没有确实没有修改过......所以不会开火......
你能帮我解释一下我的问题吗?我需要创建一些事件来识别为每个文档触发的任何内容修改(比如DOMSubtreeModified),以便我可以识别我的相关内容并进行处理吗?
非常感谢,
尼里
答案 0 :(得分:2)
您可以通过在文档对象上为您感兴趣的元素中的每个<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中根本不会触发,因此您的代码将无法在该浏览器中运行。
答案 1 :(得分:0)
for FF 2, Safari, Opera 9.6+
doc.addEventListener('DOMNodeInserted', callback, false);
doc.addEventListener('DOMNodeRemoved', callback, false);