Bagaimana cara menargetkan hanya Internet Explorer 10 untuk situasi tertentu seperti kode Internet Explorer khusus-Internet atau kode JavaScript khusus Internet Explorer?

160

Bagaimana cara menargetkan hanya Internet Explorer 10 untuk situasi tertentu seperti kode Internet Explorer khusus-Internet atau kode JavaScript khusus Internet Explorer?

Saya mencoba ini, tetapi tidak berhasil:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 mengabaikan komentar bersyarat dan menggunakan <html lang="en" class="no-js">alih - alih <html class="no-js ie10" lang="en">.

trusktr
sumber
8
Saya pikir pertanyaan yang lebih baik adalah: Bagaimana cara mendapatkan CSS ini agar terlihat sama di kedua browser?
BentOnCoding
12
IE10 PP4 Masih mendukung @cc_onpernyataan itu . Jadi, untuk mendeteksi apakah IE10 didukung atau tidak, Anda dapat menggunakan kode berikut: <!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->. (Saya memposting ini sebagai komentar, karena IE masih dalam pengembangan, jadi tidak diketahui apakah rilis final mendukung fitur ini juga)
Rob W
15
@RobW - Contoh kode Anda akan salah begitu ie11 keluar. Versi yang ditingkatkan: <script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>Perbaikan: tidak perlu komentar bersyarat; bekerja bahkan jika komentar stripping kompresi / pemrosesan; tidak ada kelas yang ditambahkan untuk ie11; akan bekerja dengan ie11 berjalan dalam mode kompatibilitas ie10; tidak perlu tag skrip mandiri (hanya dapat ditambahkan ke javascript lain di kepala).
robocat
2
Contoh cuplikan kode di atas: jsbin.com/upofoq/2
robocat
8
Solusi yang lebih umum adalah: if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';- yang memecahkan 90% masalah (kadang-kadang mode kompatibilitas gagal, dalam hal ini Anda memerlukan tingkat perbaikan lain di atas itu).
robocat

Jawaban:

65

Mungkin Anda dapat mencoba beberapa jQuery seperti ini:

if ($.browser.msie && $.browser.version === 10) {
  $("html").addClass("ie10");
}

Untuk menggunakan metode ini, Anda harus menyertakan jQuery Migrate library karena fungsi ini telah dihapus dari pustaka jQuery utama.

Berhasil cukup baik untuk saya. Tapi tentunya tidak ada pengganti untuk komentar bersyarat!

Max Sohrt
sumber
3
Saya tidak yakin tentang kalian, tetapi saya perlu menggunakannya == '10.0'agar bisa berfungsi
lulalala
112
Peringatan: jQuery.browsertidak lagi tersedia di versi jQuery (1.9) saat ini tanpa plugin. blog.jquery.com/2013/01/15/…
dave1010
2
Saya akan merekomendasikan: if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here }Catat verion <10 untuk mendeteksi versi IE yang lebih lama. IE10 dan di atas berfungsi dengan baik dengan semua CSS3, HTML5, jquery, dll.
Dan Mantyla
1
@dan karena komentar bersyarat berfungsi di semua browser IE yang kurang dari 10 gunakan alih-alih mengacaukan JS Anda untuk semua browser. Katakan saja <! - [jika IE 9]> dan Anda dapat menargetkan semua versi IE kurang dari 10. Tidak diperlukan JS.
edhurtig
1
@ Marc-AndréLafortune memunculkan poin yang bagus. Sebagai aturan praktis Anda harus selalu menggunakan operator === dan tidak ==. Saat menulis javascript, Anda harus memperhatikan hal ini. stackoverflow.com/questions/359494/…
Stewart
132

Saya tidak akan menggunakan JavaScript navigator.userAgentatau $ .browser (yang menggunakan navigator.userAgent) karena dapat dipalsukan.

Untuk menargetkan Internet Explorer 9, 10 dan 11 (Catatan: juga Chrome terbaru):

@media screen and (min-width:0\0) { 
    /* Enter CSS here */
}

Untuk menargetkan Internet Explorer 10:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS here */
}

Untuk menargetkan Edge Browser:

@supports (-ms-accelerator:true) {
  .selector { property:value; } 
}

Sumber:

Roni
sumber
Bagus sekali. Tapi seberapa peduli kita seharusnya ketika menguji berbagai mode dokumen terhadap mode browser di IE? Dalam situasi apa kita dapat mengharapkan pengguna online untuk menggunakan mode dokumen berbeda dari mode browser mereka saat ini?
klewis
orang biasanya tidak mengubah mode dokumen. Mereka bisa, tetapi saya belum menemukan situs apa pun yang mengharuskan pengguna untuk mengubah mode dokumen. Jika Anda menggunakan DOCTYPE yang benar ini bukan masalah sama sekali.
Roni
3
Kamu adalah pahlawanku! Hanya sebuah catatan, Ini juga memperbaiki beberapa hal yang berantakan di
IE11
8
Ini juga mempengaruhi IE11 - jadi jika Anda mencari solusi untuk menargetkan hanya IE9 / 10 yang ini tidak akan bekerja :-(
Lukasz Lenart
1
Apa yang Anda maksud dengan "mereka semua mendeteksi browser melalui navigator.userAgent"? Kompilasi bersyarat adalah fitur bawaan dari runtime JScript, yang tidak dapat dipalsukan melalui string agen-pengguna.
BoltClock
111

Saya menemukan solusi di situs ini di mana seseorang memiliki komentar yang berharga :

Solusinya adalah:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

Itu

  • tidak membutuhkan komentar bersyarat;
  • bekerja bahkan jika komentar stripping kompresi / pemrosesan;
  • tidak ada kelas ie10 yang ditambahkan di Internet Explorer 11;
  • lebih mungkin berfungsi sebagaimana dimaksud dengan Internet Explorer 11 berjalan dalam mode kompatibilitas Internet Explorer 10;
  • tidak perlu tag skrip mandiri (hanya dapat ditambahkan ke kode JavaScript lain di kepala).
  • tidak perlu jQuery untuk menguji
Willem de Wit
sumber
3
@ dave1010 Agen pengguna dapat dengan mudah dipalsukan. Komentar bersyarat hanya didukung oleh mesin JScript, yang hanya tersedia di IE4 + (termasuk 10).
Rob W
2
@ dave1010 Menulis parser yang berfungsi yang melakukan apa yang Anda gambarkan adalah sulit dan sangat tidak mungkin. Siapa pun yang dengan sengaja membuat dan menginstal ekstensi semacam itu kemungkinan besar bermaksud untuk "bertindak seperti" IE (mungkin untuk tujuan pengujian otomatis pada lingkungan non-Windows?). Kepercayaan 100% tidak pernah dijamin di browser, tetapi Anda bisa cukup dekat. Komentar bersyarat adalah cara yang sangat andal untuk mendeteksi mesin JScript, yang kebetulan digunakan oleh IE.
Rob W
3
satu-satunya kelemahan yang saya lihat adalah membutuhkan js, yang kondisinya tidak
James Westgate
4
Ini harus menjadi jawaban teratas, dan persyaratan JS harus diperdebatkan untuk pengguna IE10 - jika JS dinonaktifkan, itu mungkin hanya akan menjadi tambahan NoScript. Saya pikir kita perlu lebih banyak pendidikan publik tentang kebodohan semata-mata dari NoScript (sebagai lawan dari addon yang waras seperti AdBlock atau Ghostery).
iono
8
Saya sarankan menggunakan kode alternatif yang disediakan oleh penulis: if (/*@cc_on!@*/false && document.documentMode === 10) {}yang berkeliling peringatan eval dalam program linting
ajbeaven
62

Internet Explorer 10 tidak mencoba membaca komentar bersyarat lagi. Ini berarti ia akan memperlakukan komentar bersyarat seperti halnya peramban lain: sebagai komentar HTML biasa, dimaksudkan untuk diabaikan sepenuhnya. Melihat markup yang diberikan dalam pertanyaan sebagai contoh, semua browser termasuk IE10 akan mengabaikan bagian komentar, disorot abu-abu, seluruhnya. Standar HTML5 tidak menyebutkan sintaksis komentar bersyarat, dan inilah mengapa mereka memilih untuk berhenti mendukungnya di IE10.

Perhatikan, bagaimanapun, kompilasi bersyarat di JScript masih didukung, seperti yang ditunjukkan dalam komentar serta jawaban yang lebih baru. Tidak akan pergi dalam rilis final juga, tidak sepertijQuery.browser . Dan tentu saja, tak perlu dikatakan bahwa menghirup agen pengguna tetap rapuh seperti sebelumnya dan tidak boleh digunakan dalam keadaan apa pun.

Jika Anda benar-benar harus menargetkan IE10, gunakan kompilasi bersyarat yang mungkin masih melihat dukungan dalam waktu dekat, atau - jika Anda dapat membantunya - gunakan perpustakaan deteksi fitur seperti Modernizr alih-alih (atau bersamaan dengan) deteksi browser. Kecuali jika use case Anda memerlukan noscript atau menampung IE10 di sisi server, menghirup agen pengguna akan lebih memusingkan daripada pilihan yang layak.

Kedengarannya cukup rumit, tetapi ingat bahwa sebagai peramban modern yang sangat sesuai dengan standar Web saat ini 1 , dengan anggapan Anda telah menulis kode interoperable yang sangat sesuai standar, Anda tidak perlu menyisihkan kode khusus untuk IE10 kecuali benar-benar diperlukan, yaitu seharusnya menyerupai browser lain dalam hal perilaku dan rendering. 2 Dan kedengarannya tidak masuk akal, mengingat sejarah IE, tetapi berapa kali Anda berharap Firefox atau Chrome berperilaku dengan cara yang sama hanya untuk bertemu dengan kecewa?

Jika Anda memang memiliki alasan yang sah untuk menargetkan browser tertentu, tentu saja mengendusnya dengan alat lain yang diberikan kepada Anda. Saya hanya mengatakan bahwa Anda akan jauh lebih sulit untuk menemukan alasan seperti hari ini daripada apa yang dulu, dan itu benar-benar hanya bukan sesuatu yang dapat Anda andalkan.


1 Tidak hanya IE10, tetapi IE9, dan bahkan IE8 yang menangani sebagian besar standar CSS2.1 matang jauh lebih baik daripada Chrome, hanya karena IE8 sangat fokus pada kepatuhan standar (pada saat itu CSS2.1 sudah cukup stabil dengan hanya perbedaan kecil dari rekomendasi hari ini) sementara Chrome tampaknya sedikit lebih dari demo teknologi setengah jadi yang mutakhir dari standar semu.

2 Dan saya mungkin bias ketika saya mengatakan ini, tapi itu pasti sama saja. Jika kode Anda berfungsi di peramban lain tetapi tidak di IE, kemungkinan ini merupakan masalah dengan kode Anda sendiri daripada IE10 jauh lebih baik dibandingkan dengan, katakanlah, 3 tahun yang lalu, dengan versi IE sebelumnya. Sekali lagi, saya mungkin bias, tetapi mari kita jujur: bukankah Anda juga? Lihat saja komentar Anda.

BoltClock
sumber
20
Chhhh, yeah, IE10 masih tertinggal jauh di belakang webkit dan tokek. Saya memiliki beberapa CSS yang terlihat bagus di webkit dan mengerikan di IE10. Jika saya tidak dapat menemukan cara untuk menerapkan gaya secara selektif, maka saya harus meninggalkan gaya tersebut. :(
trusktr
2
Nilainya menunjukkan bahwa komentar bersyarat dihapus di IE10 karena sekarang memiliki parser HTML5. Komentar bersyarat tidak valid sesuai dengan algoritma parsing HTML5. Lihat bagian fitur legacy dari blogs.msdn.com/b/ie/archive/2011/07/06/…
David Storey
3
@trusktr jika Anda mengkodekannya dengan baik maka itu akan terlihat bagus di semua browser terbaru.
Klevis Miho
10
@KlevisMiho Tidak benar, Chrome dan Firefox mendukung fitur-fitur yang tidak dimiliki IE, walaupun dikodekan dengan baik. Jika maksud Anda "hanya menggunakan fitur umum" maka itu tidak sama dengan "kode dengan baik".
trusktr
5
@Dan Mantyla: Kalau begitu,<!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]-->
BoltClock
36

Tempat yang baik untuk memulai adalah Dokumentasi Dukungan Standar IE .

Berikut ini cara menargetkan IE10 di JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Berikut ini cara menargetkan IE10 di CSS:

@media all and (-ms-high-contrast: none) {
...
}

Jika IE11 perlu difilter atau direset melalui CSS, lihat pertanyaan lain: Bagaimana cara menulis hack CSS untuk IE 11?

Paul Sweatte
sumber
5
Solusi CSS Anda juga memengaruhi IE11: \
Lukasz Lenart
11

Kedua solusi yang diposting di sini (dengan sedikit modifikasi) berfungsi:

<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className='ie10';}</script><!--<![endif]-->

atau

<script>if(Function('/*@cc_on return 10===document.documentMode@*/')()){document.documentElement.className='ie10';}</script>

Anda memasukkan salah satu dari baris di atas di dalam tag kepala halaman html Anda sebelum tautan css Anda. Dan kemudian dalam file css Anda menentukan gaya Anda memiliki kelas "ie10" sebagai orangtua:

.ie10 .myclass1 { }

Dan voila! - browser lain tetap utuh. Dan Anda tidak perlu jQuery. Anda dapat melihat contoh bagaimana saya menerapkannya di sini: http://kardash.net .

Eugene Kardash
sumber
11

Saya telah menulis plugin kecil vanilla JavaScript yang disebut Layout Engine , yang memungkinkan Anda untuk mendeteksi fitur IE 10 (dan setiap browser lainnya), dengan cara sederhana yang tidak dapat dipalsukan, tidak seperti sniffing agen pengguna.

Itu menambahkan nama mesin rendering sebagai kelas pada tag html dan mengembalikan objek JavaScript yang berisi vendor dan versi (jika perlu)

Lihat posting blog saya: http://mattstow.com/layout-engine.html dan dapatkan kode di GitHub: https://github.com/stowball/Layout-Engine

Matt Stow
sumber
7

Saya menggunakan script ini - itu kuno, tetapi efektif dalam menargetkan terpisah Internet Explorer 10 style sheet atau berkas JavaScript yang disertakan hanya jika browser Internet Explorer 10, dengan cara yang sama yang Anda lakukan dengan komentar bersyarat. Tidak diperlukan jQuery atau plugin lain.

<script>
    /*@cc_on
      @if (@_jscript_version == 10)
          document.write(' <link type= "text/css" rel="stylesheet" href="your-ie10-styles.css" />');
      @end
    @*/
</script >
Debora
sumber
2
Keren. Bisakah Anda menambahkan sedikit info tentang apa pernyataan @ itu?
trusktr
6

Anda dapat menggunakan PHP untuk menambahkan stylesheet untuk IE 10

Suka:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10')) {
    <link rel="stylesheet" type="text/css" href="../ie10.css" />
}
Lenny Bruyninckx
sumber
2
Tidak masuk akal untuk menambahkan string karena stripos tidak peka huruf besar-kecil;)
mgutt
2
Saya selalu tergoda untuk ini, tetapi kemudian ingat bahwa itu rusak ketika ada cdn / cache / proxy di ujung depan.
Johan
5

Jika Anda harus melakukan ini, Anda dapat memeriksa string agen pengguna di JavaScript:

var isIE10 = !!navigator.userAgent.match(/MSIE 10/);

Seperti yang telah disebutkan orang lain, saya selalu merekomendasikan deteksi fitur.

dave1010
sumber
untuk apa `` !! `untuk?
Francisco Corrales Morales
4
String.match()akan mengembalikan array untuk pertandingan atau null jika tidak. !(String.match())membuatnya kembali salah untuk pertandingan atau benar tanpa pertandingan. !(!(String.match()))membuatnya kembali benar untuk pertandingan atau palsu tanpa pertandingan. !(!(something))atau hanya !!somethingkarena itu mengubah apa pun menjadi boolean benar / salah. stackoverflow.com/questions/784929/...
dave1010
@ FranciscoCorralesMorales Oh berapa kali saya telah ditanya bahwa ketika kode saya sedang dalam pengawasan. :) Sebagai perluasan ke komentar hebat dave1010, itu dapat digunakan untuk memaksa nilai 'benar' atau 'salah' menjadi nilai intrinsik boolean, misalnya var name = 'me', hasName = !!name;.
WynandB
4

Jika Anda ingin menargetkan IE 10 dengan Vanilla JavaScript, Anda mungkin ingin mencoba deteksi properti CSS:

if (document.body.style.msTouchAction != undefined) {
  document.body.className = 'ie10';
}

Properti CSS

Alih-alih msTouchActionAnda juga dapat menggunakan salah satu properti CSS ini, karena mereka saat ini hanya tersedia di IE 10. Tetapi ini mungkin berubah di masa depan.

  • msTouchAction
  • msWrapFlow
  • msWrapMargin
  • msWrapThrough
  • msScrollLimit
  • msScrollLimitXMin
  • msScrollLimitYMin
  • msScrollLimitXMax
  • msScrollLimitYMax
  • msFlexbox
  • msFlex
  • msFlexOrder

Halaman uji

Saya telah mengumpulkan halaman pengujian dengan semua properti di CodePen.

TimPietrusky
sumber
3

clipBoardData adalah fungsi yang hanya tersedia di IE, jadi jika Anda ingin menargetkan semua versi IE yang dapat Anda gunakan

<script type="text/javascript">
if (window.clipboardData)
            alert("You are using IE!");
</script>
Njaal Gjerde
sumber
-1: tapi bagaimana dengan versi? bagaimana Anda bisa tahu versi yang mana?
Francisco Corrales Morales
Browser Edge juga tidak memiliki "window.clipboardData"
AFD
@AFD Pertanyaan ini tentang IE, bukan Edge.
TylerH
3

CSS untuk IE10 + dan IE9

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ styles */
}

@media screen\0 {
    /* IE8,9,10 styles*/
}
svnm
sumber
1

Anda dapat menggunakan deteksi fitur untuk melihat apakah browser IE10 atau lebih besar seperti:

var isIE = false;
if (window.navigator.msPointerEnabled) {
    isIE = true;
}

Hanya benar jika> IE9

George Filippakos
sumber
1

Conditionizr (lihat dokumen) akan menambahkan kelas CSS browser ke elemen html Anda, termasuk ie10.

Astrotim
sumber
1

Dengan JavaScript:

if (/Trident/g.test(navigator.userAgent)) { // detect trident engine so IE
        document.getElementsByTagName('html')[0].className= 'no-js ie'; }

Bekerja untuk semua IE.

IE08 => 'Trident/4.0'

IE09 => 'Trident/5.0'

IE10 => 'Trident/6.0'

IE11 => 'Trident/7.0'

Jadi perubahan /Trident/gdengan /Trident/x.0/gmana x = 4, 5, 6atau 7(atau mungkin 8untuk masa depan).

Ender-events
sumber
1

Saya hanya ingin menambahkan versi deteksi IE saya. Ini didasarkan pada potongan yang ditemukan di http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ dan diperluas juga untuk mendukung ie10 dan ie11. Mendeteksi IE 5 hingga 11.

Yang perlu Anda lakukan adalah menambahkannya di suatu tempat dan kemudian Anda selalu dapat memeriksa dengan kondisi sederhana. Global var isIEakan tidak terdefinisi jika bukan IE, atau sebaliknya akan menjadi nomor versi. Jadi, Anda dapat dengan mudah menambahkan hal-hal seperti if (isIE && isIE < 10)atau sama.

var isIe = (function(){
    if (!(window.ActiveXObject) && "ActiveXObject" in window) { return 11; /* IE11 */ }
    if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { return 10; /* IE10  */ }
    var undef,
        v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i');
    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
    return v > 4 ? v : undef;
}());
Januari
sumber
0

Bagi saya kode berikut berfungsi dengan baik, semua komentar bersyarat bekerja di semua versi IE:

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 11)|!(IE)]><!--> <html> <!--<![endif]-->

<script>
    if (document.documentMode===10){
        document.documentElement.className+=' ie10';
    }
    else if (document.documentMode===11){
        document.documentElement.className+=' ie11';
    }
</script>

Saya di windows 8.1, tidak yakin apakah itu terkait dengan pembaruan ie11 ...

Alex
sumber
1
The (gt IE 11)bit sama sekali tidak perlu. Sebaiknya Anda lakukan <!--[if !(IE)]<!-->saja.
BoltClock
BoltClock jika (gt IE 11) ditinggalkan, dan browser pengguna adalah IE 12 (saat keluar) tidak akan ada elemen html yang ditentukan.
Leonardo Gonzalez
0

Inilah cara saya melakukan CSS khusus untuk Internet Explorer:

Dalam file JavaScript saya:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

Dan kemudian dalam file CSS saya, y mendefinisikan setiap gaya yang berbeda:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}
Francisco Corrales Morales
sumber
0

gunakan babel atau naskah untuk mengkonversi kode ini js

const browser = () => {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3576.0 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.17 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
    // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
    // "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    const _userAgent = navigator.userAgent;
    const br = {
        "Chrome": "Chrome",
        "Edge": "Edge",
        "Firefox": "Firefox",
        ".NET CLR": "Internet Explorer 11",
    };
    const nobr = {
        "MSIE 10.0": "Internet Explorer 10",
        "MSIE 9.0": "Internet Explorer 9",
        "MSIE 8.0": "Internet Explorer 8",
        "MSIE 7.0": "Internet Explorer 7"
    };
    let thisBrow = "Unknown";
    for (const keys in br) {
        if (br.hasOwnProperty(keys)) {
            if (_userAgent.includes(keys)) {

                thisBrow = br[keys];

                for (const key in nobr) {
                    if (_userAgent.includes(key)) {
                        thisBrow = nobr[key];
                    }
                }

            }
        }
    }

    return thisBrow;
};

Aliaksandr Shpak
sumber
Hai Aliaksandr, terima kasih atas idenya! Tidak yakin mengapa seseorang downvoted, tapi saya terbalik karena jawabannya setidaknya merupakan petunjuk yang bermanfaat. Siapa pun yang mundur, mengapa tidak membantu pengguna baru dengan saran bermanfaat?
trusktr
-2

Jawaban ini membuat saya 90% dari perjalanan ke sana. Saya menemukan sisa jawaban saya di situs Microsoft di sini .

Kode di bawah ini adalah apa yang saya gunakan untuk menargetkan semua yaitu dengan menambahkan kelas .ie ke <html>

Gunakan jQuery (yang tidak menggunakan .browser untuk agen pengguna di 1.9+, lihat http://api.jquery.com/jQuery.browser/ ) untuk menambahkan kelas .ie:

// ie identifier
$(document).ready(function () {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    $("html").addClass("ie");
  }
});
bdanin
sumber
"yang tidak digunakan. browser yang mendukung agen pengguna di 1.9+" Ia tidak mengatakan "mendukung agen pengguna" - apa pun artinya - katanya mendukung deteksi fitur .
BoltClock
-2

Jika Anda tidak keberatan menargetkan IE10 dan di atas dan bukan browser IE, Anda dapat menggunakan komentar bersyarat ini:

<!--[if gt IE 9]><!--> Your code here. <!--<![endif]-->

Berasal dari http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither

pengguna1003757
sumber
1
Aku tidak -1 jawaban Anda tetapi link tampaknya agak outd- delapan -ed. Perlu juga dicatat bahwa OP hanya ditujukan untuk menargetkan IE10 dan IE10. Apa pun itu, cuplikan kode Anda tidak akan berfungsi untuk IE10 dan di atasnya atau peramban non-IE lainnya, karena komentar bersyarat hanya didukung di IE5 hingga IE9.
WynandB
-2

Jika benar-benar harus, Anda dapat membuat komentar bersyarat berfungsi dengan menambahkan baris berikut ke <head>:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

Sumber

nyuszika7h
sumber
-4

solusi modern untuk css

html[data-useragent*='MSIE 10.0'] .any {
  your-style: here;
}
Raphael
sumber