2009-05-13 5 views
17

Ich bin auf der Suche nach einer Möglichkeit, eine dynamisch geladene jQuery document.ready Funktion zu debuggen.Making Firebug brechen innen dynamisch geladen Javascript

Offensichtlich kann ich nicht nur den Skriptbereich aufrufen und einen Haltepunkt mit der Maus hinzufügen, da die Funktion dort nicht existiert.

Ich habe auch versucht, "Debugger;" zur Funktion (ohne die Anführungszeichen), aber das hat nichts getan. Ich habe sichergestellt, dass die Funktion tatsächlich ausgeführt wird, während ich dies versuchte.

Danke für Ihre Hilfe,

Adrian

Edit: Ich habe gerade bemerkt, dass Firebug auf Debug tatsächlich bricht. Wenn dies jedoch bei einem dynamisch geladenen Skript geschieht, wird der Quellcode dieses Skripts nicht wie gewöhnlich angezeigt. Außerdem endet der Aufrufstapel direkt unter meinem eigenen Code. Ich kann die Implementierung für document.ready über den Call-Stack aufrufen, aber das hilft nicht wirklich. Ist das ein Firebug Bug oder habe ich etwas verpasst?

+0

Haben Sie das Debuggen in Firebug für die Domäne aktiviert, von der Ihre Seite geladen wird (Konsolenbereich)? – Cerebrus

+0

Ja, habe ich. Ich habe auch keine Probleme, die Skripte auf der Seite, die ich zuerst lade, zu debuggen, und diese Seite ist in der gleichen Domäne. Ich habe gerade den "Debugger" ausprobiert; Aussage dort und es hat gut funktioniert. So scheint es, dass die "Debugger" -Statement gerade nicht für dynamisch geladene Skripte funktioniert. –

Antwort

17

ich auf diesem similar question gerade gearbeitet. Die Lösung beinhaltet, den Word-Debugger zweimal hinzuzufügen; einmal an der Spitze der externen Datei und noch einmal am Anfang der Funktion, die debuggt werden muss.

Ich bemerkte, dass wenn das Debugger-Wort nur einmal verwendet wurde, es nicht funktionierte. Beispiel:

//myExternal.js 
debugger; 
function myExternalFunction(){ 
debugger; 
/* do something here */ 
} 
+0

Das funktioniert wirklich! Vielen Dank :-) –

+1

Update: Zum Glück wurde dieser Fehler schon lange in Firebug behoben. Ich musste diesen Trick nicht lange anwenden ... –

0

Sie könnten versuchen, einen Unterbrechungspunkt zu platzieren, an dem das Ereignis aufgerufen wird, und dann, statt auf "Play" zu klicken, wählen Sie "Step Into" (F11). Ich habe keinen Testfall vor mir, aber ich denke, das könnte funktionieren.

-2

Es gibt auch ein Debugger-Schlüsselwort, das vom IE-JScript-Debugger und vom Web-Inspektor von Safari unterstützt wird. Ich wäre also überrascht, wenn es in Firebug nicht unterstützt würde.

Grundsätzlich gilt:

// mydynamicallyloadedfile.js 
... // do stuff 
debugger; // triggers debugger 
... // more stuff 

Und ich würde erwarten, dass Firebug am debugger Stichwort brechen

+0

Danke, aber wie gesagt, ich habe die Debugger-Anweisung bereits ausprobiert und obwohl es normalerweise gut funktioniert, funktioniert es in diesem Fall nicht (Details in meiner Frage). –

+0

ah yeah, tut mir leid :-( – olliej

+0

es funktioniert auf firebug genauso wie es auf jedem anderen Browser funktioniert –

0

Ich weiß nicht, ob Sie jemals bekam dies herausgefunden, aber falls jemand anderes braucht es ...

Ich habe um diese durch den Code bewegen ich ein debuggen wollte externe Datei, die von der Hauptseite verlinkt wurde.

In meinem Fall hatte ich default.aspx laden services.aspx in ein Content-Div mit jQuery AJAX. Services.aspx wiederum geladene jQuery UI-Registerkartenelemente mit AJAX von einem Webservice, der die Daten bereitgestellt hat. Der Webservice-Code befand sich in einer Datei namens data.js, die von default.aspx verlinkt war. Ich musste den Code debuggen, der sich in der Kopfzeile von services.aspx befand (die die Registerkarten mit Daten geladen hatte), konnte sie aber in keinem der verfügbaren Inspektoren sehen. Ich habe gerade den benötigten Code in eine neue Funktion in data.js verschoben und aus dem Header in services.aspx aufgerufen.

Ich hoffe, dass das für jemanden Sinn macht, der es braucht!

+0

Ja, das funktioniert gut. In meinem Fall wurde der Code vom Server dynamisch erzeugt, obwohl er von anderen Daten in derselben Webanfrage abhängig war. –

0

gerade begegnete gleiches Verhalten (Firebug ignoriert debugger; Anweisung in dynamisch geladenen Code) in Firefox 5.0/Firebug 1.7.3.

um Arbeitete von Firebug-Fenster Abnehmen ("Open Firebug in New Window").