IE10 + tidak lagi mendukung tag deteksi browser untuk mengidentifikasi browser.
Untuk mendeteksi IE10 saya menggunakan JavaScript dan teknik pengujian kemampuan untuk mendeteksi ms
gaya prefiks tertentu yang didefinisikan seperti msTouchAction
dan msWrapFlow
.
Saya ingin melakukan hal yang sama untuk IE11, tetapi saya berasumsi bahwa semua gaya IE10 akan didukung di IE11 juga. Adakah yang bisa membantu saya mengidentifikasi hanya gaya atau kemampuan IE11 yang dapat saya gunakan untuk membedakan keduanya?
Informasi tambahan
- Saya tidak ingin menggunakan deteksi jenis Agen Pengguna karena sangat tidak rapi, dan dapat diubah, serta saya rasa saya telah membaca bahwa IE11 sengaja mencoba menyembunyikan fakta bahwa itu adalah Internet Explorer.
- Untuk contoh bagaimana pengujian kemampuan IE10 bekerja, saya menggunakan JsFiddle ini (bukan milik saya) sebagai dasar pengujian saya.
- Juga saya mengharapkan banyak jawaban dari "Ini adalah ide yang buruk ...". Salah satu kebutuhan saya untuk ini adalah bahwa IE10 mengklaim mendukung sesuatu, tetapi penerapannya sangat buruk, dan saya ingin dapat membedakan antara IE10 dan IE11 + sehingga saya dapat melanjutkan dengan metode deteksi berbasis kemampuan di masa mendatang.
- Tes ini digabungkan dengan tes Modernizr yang hanya akan membuat beberapa fungsi "mundur" ke perilaku yang kurang glamor. Kami tidak berbicara tentang fungsionalitas kritis.
JUGA saya sudah menggunakan Modernizr, tetapi tidak membantu di sini. Saya butuh bantuan untuk solusi atas pertanyaan saya yang diajukan dengan jelas.
Jawaban:
Mengingat utas yang berkembang, saya telah memperbarui di bawah ini:
YAITU 6
atau
IE 7
atau
IE 6 dan 7
atau
atau
IE 6, 7 dan 8
IE 8
atau
Hanya Mode Standar IE 8
IE 8,9 dan 10
IE 9 saja
IE 9 ke atas
IE 9 dan 10
IE 10 saja
IE 10 ke atas
atau
Penggunaan
-ms-high-contrast
sarana yang MS Edge tidak akan ditargetkan, karena Edge tidak mendukung-ms-high-contrast
.IE 11
Alternatif Javascript
Modernizr
Pemilihan agen pengguna
Javascript:
Menambahkan (misalnya) di bawah ini ke
html
elemen:Mengizinkan pemilih CSS yang sangat ditargetkan, misalnya:
Catatan kaki
Jika memungkinkan, identifikasi dan perbaiki masalah apa pun tanpa peretasan. Mendukung peningkatan progresif dan degradasi anggun . Namun, ini adalah skenario 'dunia ideal' yang tidak selalu dapat diperoleh, karena itu - hal di atas akan membantu memberikan beberapa opsi yang baik.
Atribusi / Bacaan Penting
sumber
clip: auto\9;
masih diinterpretasikan seperticlip: auto;
di IE 11. Entah bagaimana ini tidak diabaikan ...@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .relevant_selectors_for_situation {property:value;} }
Saya menemukannya di mediacurrent.com/blog/…-ms-high-contrast: active
mungkin sesuatu yang harus dihindari karena menurut spesifikasi MS Anda sebenarnya akan menargetkan pengguna tema kontras tinggi di Edge dengan aturan IE 10/11 Anda. Di halaman jawaban ini tertaut ke tentang-ms-high-contrast
itu sebenarnya mengatakan bahwa hanya-ms-high-contrast: none
nilainya tidak lagi didukung. Saya rasa tidak ada yang menyebutkan ini karena kebanyakan orang tidak mengaktifkan mode kontras tinggi dan kebanyakan orang tidak menggunakan Edge. Tapi tetap saja, ada seseorang di luar sana yang memiliki konfigurasi itu dan ini mungkin tidak bagus untuk mereka.Untuk menargetkan IE10 dan IE11 saja (dan bukan Edge):
sumber
Jadi saya menemukan solusi saya sendiri untuk masalah ini pada akhirnya.
Setelah mencari melalui dokumentasi Microsoft, saya berhasil menemukan gaya hanya IE11
msTextCombineHorizontal
Dalam pengujian saya, saya memeriksa gaya IE10 dan jika semuanya cocok, maka saya memeriksa gaya IE11 saja. Jika saya menemukannya, maka itu IE11 +, jika tidak, maka IE10.
Contoh Kode: Deteksi IE10 dan IE11 dengan CSS Capability Testing (JSFiddle)
Tampilkan cuplikan kode
/** Target IE 10 with JavaScript and CSS property detection. # 2013 by Tim Pietrusky # timpietrusky.com **/ // IE 10 only CSS properties var ie10Styles = [ 'msTouchAction', 'msWrapFlow', 'msWrapMargin', 'msWrapThrough', 'msOverflowStyle', 'msScrollChaining', 'msScrollLimit', 'msScrollLimitXMin', 'msScrollLimitYMin', 'msScrollLimitXMax', 'msScrollLimitYMax', 'msScrollRails', 'msScrollSnapPointsX', 'msScrollSnapPointsY', 'msScrollSnapType', 'msScrollSnapX', 'msScrollSnapY', 'msScrollTranslation', 'msFlexbox', 'msFlex', 'msFlexOrder']; var ie11Styles = [ 'msTextCombineHorizontal']; /* * Test all IE only CSS properties */ var d = document; var b = d.body; var s = b.style; var ieVersion = null; var property; // Test IE10 properties for (var i = 0; i < ie10Styles.length; i++) { property = ie10Styles[i]; if (s[property] != undefined) { ieVersion = "ie10"; createEl("IE10 style found: " + property); } } // Test IE11 properties for (var i = 0; i < ie11Styles.length; i++) { property = ie11Styles[i]; if (s[property] != undefined) { ieVersion = "ie11"; createEl("IE11 style found: " + property); } } if (ieVersion) { b.className = ieVersion; $('#versionId').html('Version: ' + ieVersion); } else { createEl('Not IE10 or 11.'); } /* * Just a little helper to create a DOM element */ function createEl(content) { el = d.createElement('div'); el.innerHTML = content; b.appendChild(el); } /* * List of IE CSS stuff: * http://msdn.microsoft.com/en-us/library/ie/hh869403(v=vs.85).aspx */
body { font: 1.25em sans-serif; } div { background: red; color:#fff; padding: 1em; } .ie10 div { background: green; margin-bottom:.5em; } .ie11 div { background: purple; margin-bottom:.5em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <h1>Detect IE10 and IE11 by CSS Capability Testing</h1> <h2 id="versionId"></h2>
Saya akan memperbarui contoh kode dengan lebih banyak gaya ketika saya menemukannya.
CATATAN: Ini hampir pasti akan mengidentifikasi IE12 dan IE13 sebagai "IE11", karena gaya tersebut mungkin akan terus berlanjut. Saya akan menambahkan tes lebih lanjut saat versi baru diluncurkan, dan semoga dapat mengandalkan lagi pada Modernizr.
Saya menggunakan tes ini untuk perilaku fallback. Perilaku fallback hanyalah gaya yang kurang glamor, tidak mengurangi fungsinya.
sumber
if (document.documentMode === 11) { ... }
? Kecuali, tentu saja, Anda ingin menggunakan properti CSS di@supports
at-rule (yang belum didukung di IE).Ini sepertinya berhasil:
https://www.limecanvas.com/css-hacks-for-targeting-ie-10-and-above/
sumber
Anda dapat menulis kode IE11 Anda seperti biasa lalu menggunakan
@supports
dan memeriksa properti yang tidak didukung di IE11, misalnyagrid-area: auto
.Anda kemudian dapat menulis gaya browser modern Anda di dalamnya. IE tidak mendukung
@supports
aturan tersebut dan akan menggunakan gaya asli, sedangkan ini akan diganti di browser modern yang mendukung@supports
.sumber
@supports
sama sekali, jadi IE11 mengabaikan apa pun yang ada di@supports
blok. Jadi, Anda dapat meletakkan apa saja di @supports bersyarat (misalnya@supports (display: block)
) dan IE11 akan tetap melewatinya.Berikut adalah jawaban untuk tahun 2017, di mana Anda mungkin hanya peduli tentang membedakan <= IE11 dari> IE11 ("Edge"):
@supports not (old: ie) { /* code for not old IE here */ }
Contoh yang lebih demonstratif:
body:before { content: 'old ie'; } /**/@supports not (old: ie) { body:before { content: 'not old ie'; } /**/}
Ini berfungsi karena IE11 sebenarnya tidak mendukung
@supports
, dan semua kombinasi browser / versi relevan lainnya mendukungnya .sumber
Ini berhasil untuk saya
Dan kemudian di file css hal-hal yang diawali dengan
Kapan browser ini siap mati?
sumber
Coba ini:
sumber
Lihat artikel ini: CSS: Pemilih Agen Pengguna
Pada dasarnya, saat Anda menggunakan skrip ini:
Anda sekarang dapat menggunakan CSS untuk menargetkan browser / versi apa pun.
Jadi untuk IE11 kita bisa melakukan ini:
BIOLA
sumber
rv:11.0
string agen penggunanya.Gunakan properti berikut:
sumber
Anda harus menggunakan Modernizr, ini akan menambahkan kelas ke tag body.
juga:
Perhatikan bahwa IE11 masih dalam pratinjau, dan agen pengguna dapat berubah sebelum rilis.
String agen-pengguna untuk IE 11 saat ini adalah yang ini:
Yang berarti Anda cukup menguji, untuk versi 11.xx,
sumber
Mungkin Layout Engine v0.7.0 adalah solusi yang baik untuk situasi Anda. Ia menggunakan deteksi fitur browser dan dapat mendeteksi tidak hanya IE11 dan IE10, tetapi juga IE9, IE8, dan IE7. Itu juga mendeteksi browser populer lainnya, termasuk beberapa browser seluler. Itu menambahkan kelas ke tag html, mudah digunakan, dan itu dilakukan dengan baik di bawah beberapa pengujian yang cukup dalam.
http://mattstow.com/layout-engine.html
sumber
Jika Anda menggunakan Modernizr - maka Anda dapat dengan mudah membedakan antara IE10 dan IE11.
IE10 tidak mendukung
pointer-events
properti. IE11 tidak. ( caniuse )Sekarang, berdasarkan kelas yang disisipkan Modernizr, Anda dapat memiliki CSS berikut:
sumber
Anda dapat menggunakan js dan menambahkan kelas di 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
Mendeteksi IE dan versinya sebenarnya sangat mudah, setidaknya sangat intuitif:
.
Dengan cara ini, Anda juga menangkap versi IE tinggi dalam Mode Kompatibilitas / Tampilan. Selanjutnya, masalah menetapkan kelas bersyarat:
sumber
Anda dapat mencoba ini:
sumber
Saya mengalami masalah yang sama dengan Gravity Form (WordPress) di IE11. Gaya kolom formulir "display: inline-grid" merusak tata letak; menerapkan jawaban di atas menyelesaikan perbedaan!
sumber
Langkah mundur: mengapa Anda mencoba mendeteksi "internet explorer" daripada "situs web saya perlu melakukan X, apakah browser ini mendukung fitur itu? Jika demikian, browser yang bagus. Jika tidak, saya harus memperingatkan pengguna".
Anda harus menekan http://modernizr.com/ daripada melanjutkan apa yang Anda lakukan.
sumber