Dari pertanyaan saya baru-baru ini , saya sudah membuat beberapa fungsi JavaScript untuk tampilan parsial pemuatan dinamis. Jadi, saya tidak dapat men-debug JavaScript pemuatan dinamis apa pun. Karena semua JavaScript yang dimuat akan dievaluasi oleh fungsi "eval".
Namun, saya menemukan cara untuk membuat JavaScript baru dengan menggunakan script berikut untuk membuat script secara dinamis menjadi header dari dokumen saat ini. Semua skrip yang dimuat akan ditampilkan di DOM HTML (Anda dapat menggunakan debugger apa pun untuk menemukannya).
var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";
document.getElementsByTagName('head')[0].appendChild(script);
Omong-omong, sebagian besar debugger (Toolbar Pengembang IE8, Firebug, dan Google Chrome) tidak dapat menyetel breakpoint dalam skrip dinamis apa pun. Karena skrip debuggable harus dimuat pertama kali setelah halaman dimuat.
Apakah Anda memiliki ide untuk men-debug di file atau konten skrip dinamis?
Perbarui 1 - Tambahkan kode sumber untuk pengujian
Anda dapat menggunakan file xhtml berikut untuk mencoba men-debug nilai someVariable.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic Loading Script Testing</title>
<script type="text/javascript">
function page_load()
{
var script = document.createElement('script')
script.setAttribute("id", "dynamicLoadingScript");
script.setAttribute("type","text/javascript");
script.text = "var someVariable = 0;\n" +
"someVariable = window.outerWidth;\n" +
"alert(someVariable);";
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>
</head>
<body onload="page_load();">
</body>
</html>
Dari jawaban tersebut, saya baru mengujinya di FireBug. Hasilnya harus ditampilkan seperti gambar di bawah ini.
Harap lihat skrip "dynamicLoadingScript" yang ditambahkan setelah pemuatan halaman.
Tetapi tidak ditemukan di tab skrip FireBug
Pembaruan 2 - Buat Breakpoint Debug dalam skrip pemuatan dinamis
Kedua gambar di atas menunjukkan penyisipan "debugger;" pernyataan di beberapa baris skrip dapat mengaktifkan breakpoint dalam skrip pemuatan dinamis. Namun, kedua debugger tidak menampilkan kode apa pun pada breakpoint. Oleh karena itu, tidak ada gunanya melakukan ini.
Terima kasih,
sumber
Jawaban:
Mungkin juga menggunakan chrome untuk hal yang sama. Chrome memiliki fitur di mana Anda dapat menentukan atribut parser dan membuat potongan JS dinamis muncul sebagai file yang kemudian dapat dijelajahi dan menetapkan titik putus.
atribut yang perlu disetel adalah
//# sourceURL=dynamicScript.js
di mana dynamicScript.js adalah nama file yang seharusnya muncul di browser file skrip.
Informasi lebih lanjut di sini
Paul Irish juga membicarakannya secara singkat dalam ceramahnya yang luar biasa tentang Tooling & The Webapp Development Stack
sumber
Coba tambahkan "debugger;" pernyataan di javascript yang Anda tambahkan secara dinamis. Ini harus menyebabkannya berhenti di baris itu terlepas dari pengaturan breakpoint.
sumber
Ya, (sekarang) dimungkinkan untuk men-debug JavaScript yang dimuat secara dinamis menggunakan Google Chrome!
Tidak perlu menambahkan
debugger;
atribut ekstra atau lainnya untuk file JS yang dimuat secara dinamis. Cukup ikuti langkah-langkah di bawah ini untuk men-debug:Metode 1:
Pimpinan teknis saya baru saja menunjukkan cara yang sangat mudah untuk men-debug metode Javascript yang dimuat secara dinamis.
Dalam kasus saya, ini adalah
GetAdvancedSearchConditonRowNew
Jika metode JS telah dimuat maka itu akan menunjukkan definisi metode tersebut.
Metode 2:
Sebagai contoh, saya memuat file JS ketika saya mengklik tombol menggunakan
ajax
panggilan.network
tab di alat dev google chromeRetrieveAllTags?_=1451974716935
)initiater
dan Anda akan menemukan file JS Anda yang dimuat secara dinamis (dengan awalanVM*
).VM*
file itu untuk membukanya.sumber
Saya menggunakan google chrome untuk tujuan itu.
Di chrome di tab scripts Anda dapat mengaktifkan 'pause on all exception'
Dan kemudian letakkan di suatu tempat di baris kode Anda
try{throw ''} catch(e){}
. Chrome akan menghentikan eksekusi saat mencapai garis ini.EDIT: gambar yang dimodifikasi sehingga akan lebih jelas apa yang saya bicarakan.
sumber
try{throw ''} catch(e){}
kemudian mengaktifkan mode 'jeda pada semua pengecualian' dan chrome akan menghentikan eksekusi saat pengecualian dilemparkan. Saya sudah memeriksanya berkali-kali. Saya memuat gambar lain. Lebih jelas di sana apa yang saya bicarakan.debugger
tidak akan berfungsi dalam skrip yang dibuat secara dinamis saat itu.Saya rasa Anda mungkin perlu memberi kode evaluasi "nama" seperti ini:
http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
Jika Anda melakukannya, saya pikir kemungkinan
debugger
pendekatan dari "update 2" seharusnya berfungsi.sumber
//@ sourceURL=blah
dalam produksi.debugger
bagian yang menyebabkan masalah, bukan komentar sumber (yang pasti diabaikan oleh JS)UPDATE : sintaks untuk sourceUrl telah diubah (@ diganti dengan #) untuk menghindari kesalahan pada browser yang tidak didukung (baca: IE). Detail
sumber
Menggunakan Chrome (12.0.742.112) dengan kode yang Anda berikan plus pernyataan debugger seperti ini
script.text = "debugger;var someVariable = 0;\n" + "someVariable = window.outerWidth;\n" + "alert(someVariable);";
bekerja untuk saya.
Mungkin lebih nyata jika Anda mengikat perubahan pemilih ke acara pada tampilan parsial Anda daripada membuat elemen skrip di badan html (rasanya tidak benar).
Anda bisa melakukan sesuatu seperti ini
(function(j)( var limiting_selector = ''; j(".partial_views").bind('focusin over',function(e){ limiting_selector = j(this).attr('someattr') // or j(this).data('limiting-selector') }).bind('focusout out',function(e){ limiting_selector = ''; }); // And then go on with // j(limiting_selector+' .someclass') ))(jQuery)
Kode ini akan selalu menambahkan selektor pembatas ke semua operasi pemilihan jQuery yang dilakukan saat mouse berada dalam elemen tertentu mengingat HTML tidak akan kacau.
(Masih tampak seperti peretas, mungkin seseorang memiliki solusi yang lebih baik)
Bersulang
sumber
Di Firebug, Anda seharusnya dapat melihat skrip tersebut setelah halaman dimuat dan skrip dimasukkan. Saat melakukannya, Anda dapat menyetel breakpoint di tempat yang sesuai, dan itu akan dipertahankan saat Anda menyegarkan halaman.
sumber
Javascript yang dimuat secara dinamis masih harus diurai oleh browser ini adalah tempat WebKit, atau FireBug debugger berada sehingga tunduk pada debugger apa pun yang terjadi, saya pikir ini sama untuk alat pengembang di IE8,
Jadi kode Anda tunduk pada debugger jadi di mana Anda mendapatkan masalah tidak akan ada di file atau teks itu jika tidak ada kesalahan
Hal lain
script.text = "alert('Test!');";
adalah tidak valid sehingga tidak akan berfungsi di semua browser apa yang Anda inginkanscript.innerHTML = "alert('Test!');";
Meskipun innerHTML-nya berarti kode di dalam Tag HTML bukan HTML di dalamnya hanya sebagian besar orang yang menggunakannya untuk ini sehingga salah dijelaskan
DIEDIT UNTUK PEMBARUAN DUA
Dan pada pembaruan kedua menggunakan Chrome saya melakukan ini
pergi ke about: blank Buka konsol ke atas dan lalu masuk
var script = document.createElement('script') script.setAttribute("type","text/javascript") script.innerHTML = "alert('Test!');debugger;"; document.getElementsByTagName('head')[0].appendChild(script);
maka itu akan merusak dan membuka tab skrip dengan about: blank ditampilkan (tidak ada yang dilihat)
Kemudian di sisi kanan tunjukkan daftar tumpukan panggilan, lalu klik yang kedua (fungsi anonim) dan itu akan menunjukkan kepada Anda.
Jadi pada file Anda, Anda akan memiliki (fungsi anonim) yaitu kode yang Anda jalankan dan Anda akan melihat break point di sana. jadi Anda tahu Anda yang benar.
sumber
Menggunakan Alat Pengembang Google Chrome (atau Safari ), Anda dapat menjalankan JavaScript baris demi baris. Skrip
Alat Pengembang Pilih skrip mana yang ingin Anda debug tanda jeda di sisi kanan Atau atur breakpoint dengan mengklik nomor baris
>
>
>
sumber
Salah satu opsi yang saya suka menggunakannya adalah menambahkan pernyataan console.log ('') di kode saya. Setelah pernyataan ini muncul di konsol, nomor baris akan dikaitkan dengannya. Anda dapat mengklik nomor itu untuk pergi ke lokasi di sumber dan menetapkan breakpoint. Kelemahan dari pendekatan ini adalah bahwa breakpoint tidak dipertahankan di seluruh halaman yang dimuat ulang dan Anda harus menjalankan seluruh kode sebelum Anda dapat menambahkan debugger.
sumber
Untuk browser Google Chrome saat ini atau browser modern lainnya, Anda dapat dengan mudah mencari kode yang dievaluasi dengan alat pengembang seperti gambar berikut.
Buat beberapa breakpoint dan jalankan fungsi untuk mengujinya.
sumber