2010-12-26 6 views
4

Ich versuche, ein JavaScript-Skript zu schreiben, das auf einer Facebook-Seite "überlagert" wird. Es verwendet DOMContentLoaded, um zu erkennen, wenn Inhalte geladen werden, und fügt dann einige zusätzliche Elemente hinzu. Da Facebook die Seite jedoch nicht neu lädt, wenn eine neue Seite aufgerufen wird (es verwendet nur AJAX), wird der DOMContentLoaded-Handler nicht ausgeführt Auch wenn es neue Sachen gibt, durch die man schauen kann.DOMNodeInserted oder Hashchange

Wie auch immer, um die Änderung zu erkennen, dachte ich über die Verwendung von onhashchange seit Facebook verwendet, um den Hash der Seite zu ändern, aber in Firefox 4 (Ich muss Firefox 3 und später mit diesem, aber keine anderen Browsern unterstützen), Facebook doesn ' t ändern Sie den Hash nicht mehr und in Pre-Firefox 3.6 gibt es keinen othashchange.

Ich dachte über die Verwendung von DOMNodeInserted, aber würde das wirklich die Seite verlangsamen? (Ich kann wirklich keine Verlangsamungen in diesem Skript haben.)

+0

Hat jemand versucht DOMNodeInserted zu implementieren? War Geschwindigkeit/Reaktionsfähigkeit ein Problem? (Ich habe eine ziemlich große Rückruffunktion) – jakey

Antwort

1

Für leichte Seiten hat es im Allgemeinen keine bemerkbare Wirkung. Auf sperrigen Seiten (das habe ich auf gmail versucht) macht es das aber wirklich sehr langsam, dass ich nicht mal eine Nachricht flüssig schreiben kann. Und dieses Ereignis wurde zu einem sehr einfachen Span-Element hinzugefügt, das nur einen einzigen Link hatte. Die Ereignisse wie DOMNodeInserted und DOMSubTreeModified sind echte Showstopper.

UPDATE: Für alle, die versuchen, eine Antwort zu finden, beachten Sie, dass diese Methoden DOMNodeInserted (oder DOMSubtreeModified) hatten wirklich Leistungsprobleme, so nach neuen ECMA-Spezifikationen ist es ein viel schneller Listener: MutationObserver für die gleiche Sache (und mehr).

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

Verwandte Themen