DOMNodeInserted или hashchange

Я пытаюсь написать сценарий JavaScript, который «накладывается» поверх страницы Facebook. Он использует DOMContentLoaded, чтобы определить, когда контент загружен, а затем добавляет некоторые дополнительные данные. Однако, поскольку Facebook фактически не «перезагружает» страницу при переходе на новую страницу (он просто использует AJAX), обработчик DOMContentLoaded не запускается. опять же, хотя есть что посмотреть.

В любом случае, чтобы обнаружить изменение, я подумал об использовании onhashchange, поскольку Facebook использовал для изменения хэша страницы, но в Firefox 4 (мне нужно поддерживать Firefox 3 и более поздние версии с этим, но никакие другие браузеры) Facebook не меняет хеш больше, а в версиях до Firefox 3.6 нет onhashchange.

Я думал об использовании DOMNodeInserted, но действительно ли это замедлит страницу? (Я действительно не могу иметь никаких замедлений в этом сценарии.)


person jakey    schedule 26.12.2010    source источник
comment
Кто-нибудь еще пытался реализовать DOMNodeInserted? Была ли проблема скоростью / отзывчивостью? (У меня есть довольно большая функция обратного вызова)   -  person jakey    schedule 27.12.2010


Ответы (2)


вы можете отслеживать объект windows.history, см. следующий ответ о том, как facebook использует его для обновления страниц: Страница перенаправления без обновления (стиль фотографий Facebook)

person user280109    schedule 22.01.2011

Для легких страниц это обычно не оказывает заметного влияния. Однако на объемных страницах (я пробовал это в gmail) это действительно очень медленно, так что я даже не могу плавно составить сообщение. И это событие было добавлено к очень простому элементу span, в котором была всего одна ссылка. Такие события, как DOMNodeInserted и DOMSubTreeModified, действительно ограничивают показ.

ОБНОВЛЕНИЕ: для всех, кто пытается найти ответ на этот вопрос, обратите внимание, что эти методы DOMNodeInserted (или DOMSubtreeModified) действительно имели проблемы с производительностью, поэтому, согласно новым спецификациям ECMA, это гораздо более быстрый слушатель: MutationObserver для того же (и не только) .

https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/

person Piyush Soni    schedule 29.12.2010