Javascript - событие DOMSubtreeModified не запускается для моего контента в Firefox! - PullRequest
2 голосов
/ 21 марта 2011

У меня странное поведение, и мне нужна помощь.

Я сталкиваюсь с ситуацией, когда пытаюсь распознать, был ли изменен контент страницы.Я делаю это, используя

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

Я также пытался прослушать document.DOMSubtreeModified и window.DOMSubtreeModified.

Однако иногда я получаю ситуацию, в которой по умолчанию \ выбранный документ является чем-то, что являетсядля меня не имеет значения - возможно, какой-то IFrame или встроенный рекламный ролик, или что-то подобное, и в итоге мой контент изменяется, но при взгляде на браузер DOMSubtreeModified не срабатывает, поскольку он слушает документ \ что бы то ни было, что действительно не было изменено ...

Не могли бы вы помочь моей девушке, где моя проблема?Мне нужно создать событие, которое распознает любую модификацию контента (что-то вроде DOMSubtreeModified), которая запускается для каждого документа, чтобы я мог идентифицировать свой релевантный контент и обработать его?

Большое спасибо,

Нили

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Вы можете явно прослушивать все модификации DOM, добавив прослушиватель в объект документа для каждого элемента <iframe> в интересующем вас элементе:

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 вообще не запускается, поэтому ваш код не будет работать в этом браузере.

0 голосов
/ 22 июня 2013
               for FF 2, Safari, Opera 9.6+

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