Gibt es einen JavaScript - / jQuery-DOM-change-listener?
Im wesentlichen, ich möchte ein Skript ausführen, wenn der Inhalt eines DIV
ändern. Da die Skripte zu trennen sind (Inhalt Skript im Chrome-Erweiterung & Webseite-Skript), ich brauche einen Weg, einfach beobachten Veränderungen in der DOM-Staat. Ich könnte im polling-aber das scheint schlampig.
InformationsquelleAutor Fletcher Moore | 2010-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Jahre später, es ist jetzt offiziell eine bessere Lösung. DOM4-Mutation Beobachter sind der Ersatz für veraltete DOM3-mutation-events. Sie sind derzeit in modernen Browsern als
MutationObserver
(oder wie das vendor-PräfixWebKitMutationObserver
in alten Versionen von Chrome):Diesem Beispiel wartet auf DOM-änderungen auf
document
und seine gesamte Teilstruktur, und es wird Feuer über die Veränderungen der element-Attribute als auch strukturelle Veränderungen. Der Entwurf spec hat eine vollständige Liste der gültigen mutation Hörer-Eigenschaften:(Diese Liste ist auf dem Stand April 2014; Sie können überprüfen Sie die Spezifikation für die änderungen.)
Ich sehe das Beispiel funktioniert Prima in Firefox 19.0.2: ich sehe
([{}])
angemeldet auf der Konsole, die zeigt die erwarteteMutationRecord
wenn ich drauf klicke. Überprüfen Sie bitte wieder, wie es gewesen sein könnte, einen vorübergehenden technischen Fehler in JSFiddle. Ich habe es nicht getestet im IE noch nicht, da ich nicht haben, DH 10, ist derzeit die einzige version die Unterstützung mutation-events.Ich habe gerade gebucht, eine Antwort, die funktioniert in IE10+ und meist nichts anderes.
Danke, ich habe aktualisiert die Verbindung, entfernt die etwas über das grüne Feld, und bearbeitet die gesamte Liste in meine Antwort (nur für den Fall zukünftiger link in rot).
Hier ist ein browser-Kompatibilitäts-Tabelle Kann ich Verwenden.
InformationsquelleAutor apsillers
Bearbeiten
Diese Antwort ist jetzt veraltet. Siehe die Antwort von apsillers.
Da dies für eine Chrome-Erweiterung, Sie könnte genauso gut verwenden Sie die standard-DOM-Ereignis -
DOMSubtreeModified
. Siehe die Unterstützung für diese event in allen Browsern. Es wurde unterstützt in Chrome seit 1.0.Finden Sie ein Beispiel hier.
w3.org/TR/DOM-Level-3-Events/#event-type-DOMSubtreeModified sagt, diese Veranstaltung ist veraltet, was würden wir stattdessen verwenden?
Gibt es nicht! stackoverflow.com/questions/6659662/...
Es ist github.com/joelpurra/jquery-mutation-summary die im Grunde löst es für jquery-Benutzer.
Funktioniert immer noch wenn Sie chrome-Erweiterungen. von unschätzbarem Wert sind.
InformationsquelleAutor Anurag
Viele Seiten die AJAX verwenden, um hinzufügen/anzeigen/ändern der Inhalte dynamisch an. Es wird manchmal verwendet, anstelle von in-site-navigation, also die aktuelle URL programmgesteuert geändert wird und Inhalte, die Skripts werden nicht automatisch ausgeführt, indem Sie den browser in diesem Fall, da die Seite nicht abgerufen, die von remote-server vollständig.
Üblichen JS-Methoden der Aufdeckung von änderungen der Seiten erhältlich in einer Inhalt Skript.
MutationObserver (docs) wörtlich zu erkennen, DOM-änderungen:
Ereignis-listener für Websites, die signal-content-änderung durch senden einer DOM-event:
pjax:end
aufdocument
von vielen pjax-basierte Seiten wie z.B. GitHub,sehen Wie zum ausführen von jQuery-vor und nach einer pjax laden?
message
aufwindow
verwendet, die von z.B. Google-Suche im Chrome-browser,sehen Chrome-Erweiterung erkennt Google search aktualisieren
spfdone
aufdocument
verwendet von Youtube,sehen Zu erkennen, wie die Seitennavigation auf Youtube und Bearbeiten von HTML, bevor die Seite gerendert wird?
Periodische überprüfung der DOM über setInterval:
Natürlich wird dies nur in Fällen, wenn Sie warten, für ein bestimmtes element, gekennzeichnet durch seine id/selector zu erscheinen, und es wird nicht lassen Sie universell erkennt dynamisch neue Inhalte Hinzugefügt, es sei denn, Sie erfinden eine Art von Fingerabdruck, den vorhandenen Inhalt.
Cloaking History API innerhalb einer injiziert DOM-Skript:
Hören hashchange, popstate Veranstaltungen:
Erweiterungen-spezifische: Erkennung von URL-änderungen in einem hintergrund /event-Seite.
Gibt es erweiterte API zum arbeiten mit navigation: webNavigation, webRequest, aber wir verwenden einfach chrome.tabs.onUpdated Ereignis-listener, der sendet eine Nachricht für das content-Skript:
manifestieren.json:
erklären hintergrund/Ereignis-Seite
erklären Inhalt Skript
hinzufügen
"tabs"
Erlaubnis.background.js
content.js
InformationsquelleAutor wOxxOm
Anderen Ansatz, je nachdem, wie Sie ändern die div.
Wenn Sie mit JQuery zu ändern, ein div - Inhalt mit der html () - Methode, die Sie erweitern können, die Methode und eine Registrierungsfunktion jedes mal, wenn Sie html in einem div.
Wir nur das abfangen der Anrufe, html(), eine Registrierungsfunktion mit dieser Option, die im Kontext bezieht sich auf das Ziel-element immer neue Inhalte, und dann gehen wir auf den Aufruf zum original jquery.html () - Funktion. Denken Sie daran, um die Ergebnisse des original-html () - Methode, weil JQuery rechnet damit, dass es für die Verkettung von Methoden.
Weitere Infos über die Methode überschreiben und Erweiterung, check-out http://www.bennadel.com/blog/2009-Using-Self-Executing-Function-Arguments-To-Override-Core-jQuery-Methods.htm, die ist, wo ich abgekupfert Verschluss-Funktion. Schauen Sie sich auch die plugins tutorial zu JQuery-Website.
InformationsquelleAutor Zac Imboden
Zusätzlich zu den "raw" - tools von
MutationObserver
- API gibt es "Bequemlichkeit" Bibliotheken für die Arbeit mit DOM-Mutationen.Betrachten: MutationObserver stellt jedes DOM-änderung in Bezug auf die Teilbäume. Also, wenn Sie, zum Beispiel, wartet für einen bestimmten element eingefügt werden, kann es tief im inneren der Kinder
mutations.mutation[i].addedNodes[j]
.Anderes problem ist wenn Sie Ihren eigenen code, der als Reaktion auf Mutationen, Veränderungen DOM - Sie wollen oft, um es zu filtern aus.
Einen guten convenience-Bibliothek, die löst solche Probleme ist
mutation-Zusammenfassung
(disclaimer: ich bin nicht der Autor, nur ein zufriedener user), die können Sie angeben, Abfragen, was Sie interessiert sind, und bekommen genau das.Grundlegende Bedienung Beispiel aus den docs:
InformationsquelleAutor Xan