Saya ingin memantulkan pengguna situs web kami ke halaman kesalahan jika mereka menggunakan versi Internet Explorer
sebelum v9. Hanya tidak sepadan dengan waktu dan uang kita untuk mendukung IE pre-v9
. Pengguna semua browser non-IE lainnya baik-baik saja dan tidak boleh terpental. Berikut kode yang diusulkan:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
// navigate to error page
}
}
Akankah kode ini berhasil?
Untuk menghadang beberapa komentar yang mungkin akan menghampiri saya:
- Ya, saya tahu bahwa pengguna dapat memalsukan
useragent
string mereka . Saya tidak khawatir. - Ya, saya tahu bahwa pro pemrograman lebih suka mengendus fitur-dukungan daripada jenis browser tetapi saya merasa pendekatan ini tidak masuk akal dalam kasus ini. Saya sudah tahu bahwa semua browser (yang relevan) non-IE mendukung fitur yang saya butuhkan dan bahwa semua
pre-v9 IE
browser tidak. Memeriksa fitur demi fitur di seluruh situs akan sia-sia. - Ya, saya tahu bahwa seseorang yang mencoba mengakses situs menggunakan
IE v1
(atau> = 20) tidak akan mendapatkan 'badBrowser' disetel ke true dan halaman peringatan tidak akan ditampilkan dengan benar. Itu risiko yang bersedia kami ambil. - Ya, saya tahu Microsoft memiliki "komentar kondisional" yang dapat digunakan untuk deteksi versi browser yang tepat. IE tidak lagi mendukung komentar bersyarat
IE 10
, membuat pendekatan ini sama sekali tidak berguna.
Adakah masalah nyata lainnya yang harus diperhatikan?
javascript
internet-explorer
user-agent
browser-detection
Chad Decker
sumber
sumber
Jawaban:
Ini adalah cara yang saya sukai untuk melakukannya. Ini memberikan kontrol maksimal. (Catatan: Pernyataan bersyarat hanya didukung di IE5 - 9.)
Pertama, atur kelas Anda dengan benar
Kemudian Anda bisa menggunakan CSS untuk membuat pengecualian gaya, atau, jika perlu, Anda bisa menambahkan beberapa JavaScript sederhana:
Terima kasih kepada Paul Irish .
sumber
Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
Kembalikan versi IE atau jika tidak, IE mengembalikan false
Contoh:
atau
atau
sumber
"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
if (isIE () && isIE () < 9) {
Jika tidak ada orang lain yang menambahkan
addEventLister
-metode dan Anda menggunakan mode browser yang benar maka Anda dapat memeriksa IE 8 atau kurang denganExplorer Internet lama dan attachEvent (MDN)
sumber
Gunakan komentar bersyarat. Anda mencoba mendeteksi pengguna IE <9 dan komentar bersyarat akan berfungsi di browser tersebut; di peramban lain (IE> = 10 dan non-IE), komentar akan diperlakukan sebagai komentar HTML normal, seperti itu.
Contoh HTML:
Anda juga dapat melakukan ini sepenuhnya dengan skrip, jika Anda perlu:
sumber
Untuk mendeteksi MSIE (v6 - v7 - v8 - v9 - v10 - v11) dengan mudah:
sumber
Inilah cara AngularJS memeriksa IE
sumber
Untuk memfilter IE8 dan yang lebih lama, memeriksa objek global dapat digunakan:
sumber
Mendeteksi versi IE menggunakan deteksi fitur (IE6 +, browser sebelum IE6 terdeteksi sebagai 6, mengembalikan null untuk browser non-IE):
Sunting: Saya telah membuat repo bower / npm untuk kenyamanan Anda: yaitu-versi
Memperbarui:
versi yang lebih ringkas dapat ditulis dalam satu baris sebagai:
sumber
Fungsi ini akan mengembalikan nomor versi utama IE sebagai integer, atau
undefined
jika browser bukan Internet Explorer. Ini, seperti semua solusi agen pengguna, mudah untuk spoofing agen pengguna (yang telah menjadi fitur resmi IE sejak versi 8).sumber
console.log(!!match && parseInt(match[1]))
,console.log(parseInt(match[1]))
danconsole.log(match)
, tetapi tidak ada hasil dengan mereka.getIEVersion()
. Misalnya:if (getIEVersion() < 9) {/* IE 8 or below */}
if (!getIEVersion()) {/* Not IE */}
Mendeteksi IE di JS menggunakan komentar bersyarat
sumber
Ini bekerja untuk saya. Saya menggunakannya sebagai pengalihan ke halaman yang menjelaskan mengapa kami tidak suka <IE9 dan menyediakan tautan ke browser yang kami sukai.
sumber
Kode Anda dapat melakukan pemeriksaan, tetapi seperti yang Anda duga, jika seseorang mencoba mengakses halaman Anda menggunakan IE v1 atau> v19 tidak akan mendapatkan kesalahan, jadi mungkin lebih aman melakukan pemeriksaan dengan ekspresi Regex seperti kode di bawah ini:
sumber
Komentar bersyarat tidak lagi didukung di IE pada Versi 10 sebagaimana dicatat pada halaman referensi Microsoft .
lalu gunakan:
sumber
version 11
EDIT: Kode ini LUAR BIASA! haha, itu memberi objek dengan semua yang ada di dalamnya. Versi 11 tetapi docModeIR sama dengan 9. Terima kasih!Untuk 10 dan 11 yaitu:
Anda dapat menggunakan js dan menambahkan kelas dalam html untuk mempertahankan standar komentar bersyarat :
Atau gunakan lib seperti bowser:
https://github.com/ded/bowser
Atau modernizr untuk deteksi fitur:
http://modernizr.com/
sumber
Untuk mendeteksi Internet Explorer 10 | 11 Anda dapat menggunakan skrip kecil ini segera setelah tag tubuh:
Dalam kasus saya, saya menggunakan perpustakaan jQuery dimuat di kepala.
sumber
Ini sudah dijawab sampai mati, tetapi ini yang Anda butuhkan.
sumber
sumber
Menurut Microsoft , berikut ini adalah solusi terbaik, juga sangat sederhana:
sumber
Saya akan merekomendasikan untuk tidak menulis ulang kode ini untuk yang kesekian kalinya. Saya akan merekomendasikan Anda menggunakan perpustakaan Conditionizr ( http://conditionizr.com/ ) yang mampu menguji untuk versi IE tertentu serta browser lainnya, sistem operasi, dan bahkan ada atau tidak adanya tampilan Retina.
Sertakan kode hanya untuk tes khusus yang Anda butuhkan dan Anda juga mendapatkan manfaat dari perpustakaan teruji yang telah melalui banyak iterasi (dan yang akan mudah untuk ditingkatkan tanpa melanggar kode Anda).
Ini juga cocok dengan Modernizr yang dapat menangani semua kasus di mana Anda lebih baik menguji kemampuan khusus daripada browser tertentu.
sumber
Saya suka itu:
sumber
Pendekatan untuk mendeteksi IE ini menggabungkan kekuatan dan menghindari kelemahan jawaban jKey menggunakan komentar bersyarat dan jawaban Owen menggunakan agen pengguna.
Pendekatan Owen dapat gagal pada IE 5 & 6 (pelaporan 7) dan rentan terhadap spoofing UA, tetapi dapat mendeteksi versi IE> = 10 (sekarang juga termasuk 12, yang mengunggah jawaban Owen).
Ini dapat digunakan untuk mengatur kelas berguna untuk dokumen Anda yang berisi versi IE:
Perhatikan bahwa ia mendeteksi mode kompatibilitas yang digunakan, jika IE dalam mode kompatibilitas. Perhatikan juga bahwa versi IE sebagian besar berguna untuk versi yang lebih lama (<10); versi yang lebih tinggi lebih sesuai standar dan mungkin lebih baik memeriksa fitur menggunakan sesuatu seperti modernizr.js.
sumber
Saya membuat mixin garis bawah yang nyaman untuk ini.
sumber
atau sederhana
sumber
Skrip JS terlengkap yang saya temukan untuk memeriksa versi IE adalah http://www.pinlady.net/PluginDetect/IE/ . Seluruh perpustakaan ada di http://www.pinlady.net/PluginDetect/Browsers/ .
Dengan IE10, pernyataan bersyarat tidak lagi didukung.
Dengan IE11, agen pengguna tidak lagi berisi MSIE. Juga, menggunakan agen pengguna tidak dapat diandalkan karena itu dapat dimodifikasi.
Menggunakan skrip PluginDetect JS, Anda dapat mendeteksi untuk IE dan mendeteksi versi yang tepat dengan menggunakan kode yang sangat spesifik dan dibuat dengan baik yang menargetkan versi IE tertentu. Ini sangat berguna saat Anda peduli dengan versi browser yang Anda gunakan.
sumber
Saya menyadari bahwa saya agak terlambat ke pesta di sini, tetapi saya telah memeriksa cara sederhana satu baris untuk memberikan umpan balik tentang apakah browser IE dan versi apa dari 10 turun itu. Saya belum mengkodekan ini untuk versi 11, jadi mungkin diperlukan sedikit amandemen untuk itu.
Namun ini adalah kode, ini berfungsi sebagai objek yang memiliki properti dan metode dan bergantung pada deteksi objek daripada menggores objek navigator (yang cacat besar-besaran karena dapat dipalsukan).
Penggunaannya adalah
isIE.browser
properti yang mengembalikan boolean dan bergantung pada komentar bersyarat metodeisIE.detectedVersion()
yang mengembalikan angka antara 5 dan 10. Saya membuat asumsi bahwa apapun yang lebih rendah dari 6 dan Anda berada di wilayah sekolah tua yang serius dan Anda akan memiliki sesuatu yang lebih gemuk daripada satu liner dan apa pun yang lebih tinggi dari 10 dan Anda berada di wilayah yang lebih baru. Saya telah membaca sesuatu tentang IE11 yang tidak mendukung komentar bersyarat tapi saya belum sepenuhnya diselidiki, itu mungkin untuk nanti.Bagaimanapun, dan untuk liner satu, itu akan mencakup dasar-dasar browser IE dan deteksi versi. Jauh dari sempurna, tetapi kecil dan mudah diubah.
Hanya untuk referensi, dan jika ada yang ragu tentang bagaimana sebenarnya menerapkan ini maka persyaratan berikut akan membantu.
sumber
Mendeteksi IE dan versinya tidak bisa lebih mudah, dan yang Anda butuhkan adalah sedikit Javascript asli / vanilla:
Dan ini adalah cara untuk menggunakannya:
.
Bekerja di semua versi IE, termasuk versi yang lebih tinggi di Tampilan / Mode Kompatibilitas yang lebih rendah, dan
documentMode
merupakan hak milik IE.sumber
Jika Anda perlu menghapus versi Browser IE maka Anda dapat mengikuti kode di bawah ini. Kode ini bekerja dengan baik untuk versi IE6 ke IE11
sumber
Jendela yang menjalankan IE10 akan menjadi pembaruan otomatis ke IE11 + dan akan menjadi W3C standar
Sekarang ini, kita tidak perlu mendukung IE8-
sumber
sumber
sumber