Мне нужен эффективный механизм для обнаружения изменений в DOM. Предпочтительно кросс-браузер, но если есть какие-либо эффективные средства, которые , а не кросс-браузер, я могу реализовать их с помощью отказоустойчивого метода кросс-браузер.
В частности, мне нужно обнаружить изменения, которые повлияют на текст на странице, поэтому потребуются любые новые, удаленные или измененные элементы или изменения внутреннего текста (innerHTML).
Я не контролирую внесенные изменения (они могут быть связаны с включением стороннего javascript и т. Д.), Поэтому к нему нельзя подходить с этой точки зрения - мне нужно как-то «отслеживать» изменения.
В настоящее время я реализовал метод "quick'n'dirty", который проверяет body.innerHTML.length
с интервалами. Это, конечно, не обнаружит изменений, которые приведут к возвращению одинаковой длины, но в этом случае «достаточно хороши» - шансы на это чрезвычайно малы, и в этом проекте не обнаружение изменений не приведет к в потерянных данных.
Проблема с body.innerHTML.length
в том, что это дорого. Это может занять от 1 до 5 миллисекунд в быстром браузере, и это может сильно затормозить - я также имею дело с большим количеством iframes, и все это складывается. Я почти уверен, что дороговизна этого процесса заключается в том, что текст innerHTML не хранится статически браузерами и должен вычисляться из DOM каждый раз, когда его читают.
Типы ответов, которые я ищу, - что угодно, от «точного» (например, события) до «достаточно хорошего» - возможно, такого же «быстрого и ненадежного», как метод innerHTML.length, но выполняемого быстрее.
EDIT:
Я также должен отметить, что хотя было бы «хорошо» обнаружить точный элемент, который был изменен, это не является абсолютной необходимостью - просто факт того, что было любое изменение, будет достаточно хорошим. Надеюсь, это расширяет ответы людей. Я собираюсь исследовать Mutation Events, но мне все еще нужен запасной вариант для поддержки IE, так что любые дурацкие, креативные, нестандартные идеи будут приветствоваться.