2009-05-13 11 views
17

Poszukuję sposobu debugowania dynamicznie ładowanej funkcji document.ready jQuery.Co Firebug włamuje się do dynamicznie ładowanego javascript

Oczywiście nie mogę po prostu wywołać panelu skryptu i dodać punktu przerwania za pomocą myszy, ponieważ funkcja tam nie istnieje.

Próbowałem również dodać "debugger;" do funkcji (bez cudzysłowów), ale to nic nie dało. Upewniłem się, że funkcja jest faktycznie wykonywana, gdy próbowałem tego.

Dzięki za pomoc,

Adrian

Edit: Właśnie zauważyłem, że Firebug rzeczywiście łamie na debugowania. Jednak, gdy robi to na dynamicznie ładowanym skrypcie, nie wywołuje jak zwykle kodu źródłowego tego skryptu. Dodatkowo stos połączeń kończy się tuż pod moim własnym kodem. Mogę przywołać implementację dla document.ready poprzez stos wywołań, ale to naprawdę nie pomaga. Czy to błąd Firebuga, czy coś przeoczyłem?

+0

Czy włączono debugowanie w Firebug dla domeny, z której ładowana jest strona (panel konsoli)? – Cerebrus

+0

Tak, mam. Nie mam też problemów z debugowaniem skryptów na stronie, którą ładuję najpierw, a strona jest w tej samej domenie. Właśnie wypróbowałem "debugger;" oświadczenie tam i działało dobrze. Wygląda więc na to, że "debugger" po prostu nie działa dla dynamicznie ładowanych skryptów. –

Odpowiedz

17

właśnie pracował nad tym similar question. Rozwiązanie polega na dwukrotnym dodaniu słowa debugger; raz na górze pliku zewnętrznego i jeszcze raz na górze funkcji, która wymaga debugowania.

Zauważyłem, że jeśli słowo debuggera zostało użyte tylko raz, nie zadziałało. Przykład:

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

To naprawdę działa! Wielkie dzięki :-) –

+1

Aktualizacja: Na szczęście ten błąd został już naprawiony w Firebug. Od dawna nie musiałem stosować tej sztuczki ... –

0

Możesz spróbować umieścić punkt przełomowy w miejscu zdarzenia, a następnie kliknąć "Graj", wybierz "Krok" (F11). Nie mam przed sobą testu, ale myślę, że to może zadziałać.

-2

Istnieje również słowo kluczowe "debugger" obsługiwane przez debugger IE JScript i Safari's Web Inspector, więc byłbym zaskoczony, gdyby nie był obsługiwany w firebug.

Zasadniczo:

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

A ja spodziewałbym Firebug przerwać na debugger hasła

+0

Dzięki, ale jak już powiedziałem, już wypróbowałem oświadczenie debuggera i chociaż zwykle działa dobrze, to nie działa w tym przypadku (szczegóły w moim pytaniu). –

+0

ah tak, przepraszam :-( – olliej

+0

działa na firebug w taki sam sposób jak działa na każdej innej przeglądarce –

0

ja nie wiem, czy kiedykolwiek dostał to zorientowali się, ale w przypadku, gdy ktoś inny potrzebuje ...

mam wokół to przez przeniesienie kodu chciałem debugowania do plik zewnętrzny, który został połączony ze stroną główną.

W moim przypadku miałem default.aspx ładowanie services.aspx do div zawartości za pomocą jQuery AJAX. Services.aspx z kolei ładował elementy zakładki jQuery UI za pomocą AJAX z usługi internetowej, która dostarczała dane. Kod usługi sieciowej znajdował się w pliku o nazwie data.js, który został powiązany z default.aspx. Musiałem debugować kod, który znajdował się w nagłówku services.aspx (który załadował karty z danymi), ale nie mógł go zobaczyć w żadnym z dostępnych inspektorów. Właśnie przeniosłem kod potrzebny do nowej funkcji w data.js i wywołałem ją z nagłówka w services.aspx.

Mam nadzieję, że ma to sens dla kogoś, kto tego potrzebuje!

+0

Tak, to działa dobrze. W moim przypadku kod został wygenerowany dynamicznie przez serwer, jednak w zależności od innych danych w tym samym żądaniu internetowym. –

0

Po prostu napotkano to samo zachowanie (Firebug ignoruje instrukcję debugger; w dynamicznie ładowanym kodzie) w Firefox 5.0/Firebug 1.7.3.

Obejście problemu przez odłączenie okna Firebug ("Otwórz Firebug w nowym oknie").

Powiązane problemy