2009-10-26 18 views
7

Die Seite, die ich versuche zu inspizieren hat ein verstecktes Element auf einer Seite, wo Javascript/AJAX den Wert ändert. Ich versuche zu finden, wo in der Welt in Javascript der Code ist, der diesen Wert von Zeit zu Zeit ändert.Wie finde ich das JavaScript-Snippet, das ein Element verändert?

Gibt es ein Tool, das mir helfen könnte, die Stellen in Javascript zu finden, die dieses Element verwenden/ändern? Stellt Firebug dies zur Verfügung, wenn ja, wie?

Hinweis: Wenn Sie im Code nach "Foo" suchen, aber ich habe keine passenden Titel gefunden. Es gibt JSON und Mootools geladen, + applikationsspezifischen Code, der mehrere tausend Zeilen Code ergibt. Auf das Element wird wahrscheinlich indirekt zugegriffen.

Antwort

1

Woher wissen Sie, dass das Javascript diesen Wert ändert? Da es so aussieht, weißt du bereits, wann es aufgerufen wird (da du weißt, dass es sich ändert), würde ich in Firebug einen Haltepunkt vorschlagen, der das Ändern initialisiert (wahrscheinlich ein onclick-Attribut in einem anderen Element).

Es ist ein bisschen schwer zu sagen, eine "generische" Art und Weise zu wissen, wo in Javascript ändert es Foo Wert, da es viele verschiedene Ansätze, verschiedene Bibliotheken, jedes mit seiner Syntax.

Wenn Sie beispielsweise versucht haben, "Foo" zu suchen und es nicht gefunden haben, kann das Skript das DOM durchlaufen und den Wert der Eingabe als "erstes Kind von etwas" ändern. Ich würde versuchen, nach Namen oder IDs der Elternelemente der Eingabe zu suchen und den Code von dort zu verstehen.

Normalerweise versuche ich einfach, die JavaScript-Logik von jedem Skript zu verstehen, das ich mit Firebugs Debugging-Techniken verwende - aber nur mit dem Skript, das die Bibliotheken verwendet.

+0

+1 für die generische Art der 'Grep'ing die Quelle für Kandidaten, die die Änderung vornehmen. Hoffentlich sollte es bessere Wege geben, einen Haltepunkt zu setzen, als in anderen Antworten beschrieben. – GuruM

0

Wenn Firebug Sie auf Einstellung einen Wert definieren Stützpunkte nicht nachlässt, könnte man so etwas in der Seite (Firefox-only) einfügen:

$("textarea")[0].__defineSetter__("value", function(val) { 
    alert("called"); 
}) 

Und entweder Haltepunkt auf die Funktion in Firebug oder Verwendung console.log oder was auch immer, um den Stapel auf die Firebug-Konsole zu entladen.

Ich erinnere mich, irgendwo eine Präsentation über Firebug-Pläne gesehen zu haben, die einen Abschnitt über verschiedene Arten von zu unterstützenden Breakpoints enthielt, aber ich kann im Moment keinen Link dazu finden.


[Bearbeiten] Die oben ist für den Fall der Wert durch die Zuordnung auf den Wert Eigenschaft festgelegt ist: .value = .... Wenn Sie den Moment erfassen müssen, in dem ein Attribut geändert wird (.setAttribute("value", ...)), können Sie DOM-Mutationslistener verwenden.

+0

+1 für die Info. Können Sie Informationen über __how__ teilen, um DOM-Mutationslistener zu verwenden? Ein Link oder zwei vielleicht? Vielen Dank. – GuruM

+1

@GuruM: Verwenden Sie addEventListener mit dem Ereignisnamen DOMAttrModified, siehe https://developer.mozilla.org/en-US/docs/DOM/Mutation_events. Beachten Sie, dass Mutationslistener zugunsten eines anderen Mechanismus, Mutationsbeobachtern (auch auf der MDN-Seite erwähnt), auslaufen. – Nickolay

+0

+1 @Nickolay. Danke für den Link. – GuruM

8

Firebug 1.5 wird "Break-on-Modify" im HTML-Panel haben. Siehe http://getfirebug.com/doc/breakpoints/demo.html#html - Brechen Sie bei DOM (HTML) -Mutationsereignissen.

+0

+1 für die Info. Es gibt eine Funktion zum Aufteilen und Ändern von Breakpoints.Als ich jedoch versuchte, einen solchen Haltepunkt zu setzen, funktionierte er nicht, d. H. Er brach nicht den Code, der die Änderungen machte, um zu sagen, dass ein Schaltflächentitel/Status geändert wurde. Also nicht sicher, was getan werden muss, außer den Haltepunkt zu setzen. – GuruM

Verwandte Themen