Saya menggunakan Firebug dan memiliki beberapa pernyataan seperti:
console.log("...");
di halaman saya. Di IE8 (mungkin versi sebelumnya juga) saya mendapatkan kesalahan skrip yang mengatakan 'konsol' tidak terdefinisi. Saya mencoba meletakkan ini di bagian atas halaman saya:
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
masih saya mendapatkan kesalahan. Adakah cara untuk menghilangkan kesalahan?
javascript
internet-explorer
internet-explorer-8
ie-developer-tools
pengguna246114
sumber
sumber
typeof
di if Anda, itu akan menghindari kesalahan yang tidak ditentukan:if(typeof console === "undefined") { var console = { log: function (logMsg) { } }; }
Jawaban:
Mencoba
Variabel tidak terdefinisi tidak dapat dirujuk secara langsung. Namun, semua variabel global adalah atribut dengan nama yang sama dari konteks global (
window
dalam hal browser), dan mengakses atribut yang tidak ditentukan adalah baik-baik saja.Atau gunakan
if (typeof console === 'undefined') console = ...
jika Anda ingin menghindari variabel ajaibwindow
, lihat jawaban @Tim Down .sumber
<script type="text/javascript"> if (!window.console) console = {log: function() {}}; </script>
di bagian atas halaman Anda! Terima kasih, Kenny.var console = console || { log: function() {} };
window
:var console = window.console || { log: function() {} };
Rekatkan yang berikut di bagian atas JavaScript Anda (sebelum menggunakan konsol):
Wrapper penutupan fungsi adalah untuk lingkup variabel untuk tidak mendefinisikan variabel apa pun. Ini melindungi terhadap tidak terdefinisi
console
dan tidak terdefinisiconsole.debug
(dan metode lain yang hilang).EDIT: Saya perhatikan bahwa HTML5 Boilerplate menggunakan kode serupa di file js / plugins.js, jika Anda mencari solusi yang (mungkin) akan terus diperbarui.
sumber
Alternatif lain adalah
typeof
operator:Alternatif lain adalah dengan menggunakan perpustakaan logging, seperti log4javascript saya sendiri .
sumber
var
? Itu hanya akan membingungkan hal-hal di sini. Atau maksud Anda menugaskan kewindow.console
bukanconsole
?var
. Mengapa hal itu membingungkan di sini?typeof
Dijamin untuk mengembalikan string dan"undefined"
string. Ketika kedua operan memiliki tipe yang sama,==
dan===
ditentukan untuk melakukan langkah yang persis sama. Menggunakantypeof x == "undefined"
adalah cara yang solid untuk menguji apakahx
tidak terdefinisi dalam lingkup apa pun dan lingkungan yang sesuai dengan ECMAScript 3.Untuk solusi yang lebih kuat, gunakan kode ini (diambil dari kode sumber twitter):
sumber
Dalam skrip saya, saya juga menggunakan steno:
atau, jika tidak mungkin atau tidak layak untuk mengedit setiap baris console.log, saya membuat konsol palsu:
sumber
if(!console) {console = {} ; console.log = function(){};}
!window.console && (window.console = { log: function () { } });
Anda dapat menggunakan IE8
console.log()
jika telahDeveloper Tools
dibuka dan Anda juga dapat menggunakanConsole
kotak teks pada tab skrip.sumber
sumber
this
mengacuwindow
.Berdasarkan dua jawaban sebelumnya oleh
dan dokumentasi untuk
Inilah implementasi upaya terbaik untuk masalah ini, artinya jika ada console.log yang benar-benar ada, ini mengisi celah untuk metode yang tidak ada melalui console.log.
Misalnya untuk IE6 / 7 Anda dapat mengganti logging dengan waspada (bodoh tapi berfungsi) dan kemudian memasukkan monster di bawah ini (saya menyebutnya console.js): [Jangan ragu untuk menghapus komentar sesuai keinginan, saya meninggalkannya untuk referensi, minimizer dapat mengatasinya]:
dan console.js:
sumber
methods.hasOwnProperty(method) &&
di loop for.> x = { a: 1, b: 2}
->Object {a: 1, b: 2}
danfor(var f in x) {console.log(f + " " + x[f]);} 'end'
->a 1 b 2 "end"
. Jadi objek anonim yang dibuat tidak memiliki properti tambahan, danmethods
baru saja dibuat sebelumfor
loop. Apakah mungkin untuk meretas di atas?var x = { a: 1, b: 2}; Object.prototype.surprise = 'I\'m in yer objectz'; for (var f in x) {console.log(f, x[f]);}
Anda tidak pernah tahu apa yang telah dilakukan perpustakaan terhadap objek dalam rantai pewarisan objek yang Anda kerjakan. Demikian rekomendasi oleh alat kode kualitas javascript seperti jshint dan jslint untuk digunakanhasOwnProperty
.Di IE9, jika konsol tidak dibuka, kode ini:
akan menampilkan "objek", tetapi kode ini
akan mengeluarkan pengecualian TypeError, tetapi tidak mengembalikan nilai yang tidak ditentukan;
Jadi, versi kode yang dijamin akan terlihat seperti ini:
sumber
Saya hanya menggunakan console.log dalam kode saya. Jadi saya menyertakan 2 liner yang sangat pendek
sumber
Melihat bahwa OP menggunakan Firebug dengan IE, maka anggaplah itu Firebug Lite . Ini adalah situasi yang funky karena konsol didefinisikan di IE saat jendela debugger dibuka, tetapi apa yang terjadi ketika Firebug sudah berjalan? Tidak yakin, tapi mungkin metode "firebugx.js" mungkin cara yang baik untuk menguji dalam situasi ini:
sumber:
https://code.google.com/p/fbug/source/browse/branches/firebug1.2/lite/firebugx.js?r=187
(tautan yang diperbarui 12/2014)
sumber
Saya menggunakan fauxconsole ; Saya memodifikasi css sedikit sehingga terlihat lebih bagus tetapi bekerja dengan sangat baik.
sumber
Untuk debugging di IE, lihat log4javascript ini
sumber
Untuk IE8 atau dukungan konsol terbatas pada console.log (tanpa debug, lacak, ...) Anda dapat melakukan hal berikut:
Jika konsol ATAU console.log tidak terdefinisi: Buat fungsi dummy untuk fungsi konsol (lacak, debug, log, ...)
window.console = { debug : function() {}, ...};
Lain jika console.log didefinisikan (IE8) DAN console.debug (lainnya) tidak didefinisikan: redirect semua fungsi logging ke console.log, ini memungkinkan untuk menyimpan log tersebut!
window.console = { debug : window.console.log, ...};
Tidak yakin tentang dukungan tegas dalam berbagai versi IE, tetapi ada saran dipersilahkan. Diposting juga jawaban ini di sini: Bagaimana saya bisa menggunakan logging konsol di Internet Explorer?
sumber
sumber
Rintisan konsol dalam TypeScript:
sumber
Anda dapat menggunakan yang di bawah ini untuk memberikan tingkat asuransi tambahan yang telah Anda dapatkan dari semua pangkalan. Penggunaan
typeof
pertama akan menghindariundefined
kesalahan. Menggunakan===
juga akan memastikan bahwa nama tipe sebenarnya adalah string "tidak terdefinisi". Terakhir, Anda ingin menambahkan parameter ke tanda tangan fungsi (saya pilih secaralogMsg
sewenang-wenang) untuk memastikan konsistensi, karena Anda meneruskan apa pun yang ingin Anda cetak ke konsol ke fungsi log. Ini juga membuat Anda sangat akurat dan menghindari segala peringatan / kesalahan dalam IDE JS aware Anda.sumber
Terkadang konsol akan berfungsi di IE8 / 9 tetapi gagal di waktu lain. Perilaku tidak menentu ini tergantung pada apakah Anda memiliki alat pengembang terbuka dan dijelaskan dalam pertanyaan stackoverflow Apakah IE9 mendukung console.log, dan apakah ini merupakan fungsi nyata?
sumber
Mengalami masalah serupa menjalankan console.log di windows anak di IE9, dibuat oleh fungsi window.open.
Tampaknya dalam hal ini konsol hanya ditentukan di jendela induk dan tidak ditentukan di jendela anak hingga Anda menyegarkannya. Hal yang sama berlaku untuk anak-anak dari windows anak.
Saya menangani masalah ini dengan membungkus log di fungsi berikutnya (di bawah ini adalah bagian dari modul)
sumber
Setelah mengalami begitu banyak masalah dengan hal ini (sulit untuk men-debug kesalahan karena jika Anda membuka konsol pengembang kesalahan tidak lagi terjadi!) Saya memutuskan untuk membuat kode berlebihan untuk tidak perlu repot dengan ini lagi:
Secara pribadi saya hanya pernah menggunakan console.log dan console.error, tetapi kode ini menangani semua fungsi lain seperti yang ditunjukkan di Mozzila Developer Network: https://developer.mozilla.org/en-US/docs/Web/API/console . Cukup taruh kode itu di bagian atas halaman Anda dan Anda selesai selamanya dengan ini.
sumber
Anda dapat menggunakan console.log (...) langsung di Firefox tetapi tidak di IEs. Di IEs Anda harus menggunakan window.console.
sumber