2012-06-28 18 views
7

I * Korzystam z JS po stronie klienta do parsowania plików XML i generowania złożonego kodu JS do eval w wyniku. (Generowanie funkcji wielokrotnego użytku uruchamianych przez środowisko wykonawcze). Muszę jednak debugować generowany kod i chcę używać wbudowanych w Chrome punktów przerwania, kroków, podglądu okien itp.Ustaw punkty przerwania i debugowanie eval'd JavaScript

Czy istnieje łatwiejszy sposób na zrobienie tego niż:

  • Zrzuć wygenerowany ciąg JS do konsoli i/lub okna.
  • Skopiuj skrypt JavaScript
  • (opcjonalnie) Uruchom narzędzie JS za pomocą symulatora, takiego jak JSBeautifier.
  • Wklej JS do pliku załadowanego przez <script src="..."> na innej stronie internetowej.

* faktycznie, mój przyjaciel robił to, nie ja

Odpowiedz

16

Zamiast eval, a zamiast ręcznego kopiowania/wklejania w osobnym pliku, można dynamicznie załadować JS bezpośrednio na stronie, która go wygenerowała, za pomocą elementu data uri na dynamicznie tworzonym elemencie <script>. Dzięki takiemu podejściu narzędzia deweloperskie Chrome (i Firebug) pozwalają wybrać URI danych jako skrypt, włączyć ładny druk, ustawić punkty przerwania i gotowe.

var js = createMyJSCodeString(); 
addCode(js); // Right now! Debuggable! 

// Dynamically evaluate JavaScript-as-string in the browser 
function addCode(js){ 
    var e = document.createElement('script'); 
    e.type = 'text/javascript'; 
    e.src = 'data:text/javascript;charset=utf-8,'+escape(js); 
    document.body.appendChild(e); 
} 
+0

Czy po prostu ... odpowiedziałeś sobie? Brzmiało to tak, jakbyś już o tym mówił w swoim pytaniu. – TheZ

+4

@ TheZ Tak, zrobiłem. Jest to [zaakceptowana praktyka w przepełnieniu stosu] (http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question) w celu dodania do bazy wiedzy. Istnieje teraz nawet znacznik wyboru, który należy nacisnąć, aby automatycznie dodawać odpowiedzi podczas zamieszczania pytania, co zostało tutaj użyte. – Phrogz

+0

Och, widzę! Dziękuję za wyjaśnienie tego. – TheZ

Powiązane problemy