Apa pun versi browser IE-nya, selalu ada yang tidak sesuai dengan standar Web. Bagi pekerja kode, hal ini tentu saja menyedihkan. Untuk mempertimbangkan masalah kompatibilitas IE, baik menulis CSS atau JS, IE sering diperlakukan secara khusus, yang memerlukan beberapa penilaian. Artikel ini tidak membahas cara membedakan style IE, hanya JS yang menentukan browser IE.
Metode Javascript terpendek di dunia untuk menentukan browser IE berasal dari Rusia! Ini telah diuji pada berbagai versi IE dan browser populer lainnya saat ini. Meskipun Microsoft telah mengetahui bug berbasis IE, Microsoft tidak pernah memperbaikinya.
var yaitu = !-[1,]; waspada (yaitu); |
Hasil eksekusi kode di atas: mengembalikan nilai true di bawah IE, dan mengembalikan false di browser standar lainnya. !-[1,], hanya 6 byte!
Namun, jika penilaiannya terbalik, jika browser standar mengembalikan nilai true dan IE mengembalikan false, maka dapat dipersingkat satu byte.
notIe = -[1,]; jika(-[1,]){ // Kode peramban standar }kalau tidak{ // Kode hanya untuk IE } |
Setelah membaca ini, apakah Anda penasaran bagaimana cara kerjanya? Silakan lanjutkan membaca di bawah ini.
Bug ini terjadi karena IE menambahkan elemen array kosong ke jumlah total elemen array.
[1,]. Panjang browser standar akan mengembalikan 1 (berdasarkan skrip ECMA standar, koma "," di akhir array akan diabaikan, ini untuk memfasilitasi tampilan di kolom dan pembuatan otomatis, dll.), tetapi IE akan kembali 2. Saat Anda mencetak array ini, IE akan mengembalikan "1, ", yang merupakan dua elemen, sedangkan browser standar lainnya akan mengembalikan "1".
Ini mudah diverifikasi dengan menjalankan kode berikut di IE dan FF:
peringatan([,]==','); //Ini adalah 8 karakter untuk menentukan IE |
[1,] Faktanya, pengoperasian browser adalah toString() untuk mengubah string menjadi string, dan -[1,] untuk memaksa string menjadi angka. IE akan mengembalikan NaN, tapi sayangnya NaN bukan angka, karena "1", setelah [1,] diubah menjadi string, berisi koma. Browser standar lainnya akan mengembalikan -1, yang merupakan angka bukan nol.
Anda tahu, mengonversi NaN ke Boolean akan menghasilkan false, jadi -[1,] akan mengembalikan false di IE. Setiap angka selain 0 yang dikonversi ke tipe Boolean (seperti -1) akan menghasilkan nilai true pada browser standar. Jadi kita mendapatkan hasil penilaian, !-[1,] mengembalikan nilai true pada IE, namun mengembalikan false pada browser standar lainnya. Hal ini juga mencapai tujuan membedakan dan menilai browser IE.
Tentu saja, seperti yang disebutkan sebelumnya, Microsoft sebenarnya sudah mengetahui bug ini sejak lama, tetapi belum pernah memperbaikinya, jadi di masa mendatang > IE8 Browser IE tidak yakin apakah masih akan berfungsi, tetapi pada dasarnya setelah beberapa generasi IE telah belum diperbaiki, dan kecil kemungkinan IE akan diperbaiki di masa mendatang.
Berikut ini adalah beberapa kode lain untuk membedakan dan menilai browser IE, bisa juga anda simak berikut ini:
// Opsi dari Dekan Edwards: var yaitu = /*@cc_on!@*/false; // Gunakan baris komentar: var yaitu//@cc_on=1; // Variasi (variabel lebih pendek): var yaitu = 'v'=='v'; // Opsi untuk Gareth Hayes (mantan pemegang rekor): var yaitu = !+"v1"; |