Periksa apakah pengguna menggunakan IE


391

Saya memanggil fungsi seperti yang di bawah ini dengan mengklik divs dengan kelas tertentu.

Apakah ada cara saya dapat memeriksa ketika memulai fungsi jika pengguna menggunakan Internet Explorer dan batalkan / batalkan jika mereka menggunakan browser lain sehingga hanya berjalan untuk pengguna IE? Pengguna di sini semuanya menggunakan IE8 atau versi yang lebih tinggi, jadi saya tidak perlu membahas IE7 dan versi yang lebih rendah.

Jika saya bisa tahu browser mana yang mereka gunakan itu akan bagus tetapi tidak diperlukan.

Fungsi contoh:

$('.myClass').on('click', function(event)
{
    // my function
});

1
Gunakan modernizer untuk mendeteksi IE atau browser lain. stackoverflow.com/questions/13478303/…
chris

7
Dengan standar pengembangan web modern, ini adalah praktik buruk untuk dikembangkan untuk versi IE lama.
Rosseyn

7
Sebenarnya, "praktik buruk" ini dipaksakan oleh standar itu sendiri, jadi itu bukan kesalahan pengembang ... Browser bekerja secara berbeda dan spesifikasi terlalu lunak untuk masalah implementasi. Untuk membuat sesuatu yang tidak buggy dan tidak membosankan sekali kita harus melakukan deteksi browser. Saya akan menyarankan praktek terbaik lainnya: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Maaf, tetapi kegilaan ini harus berakhir pada titik tertentu dan entah bagaimana ...
user2173353

2
Ini adalah praktik yang lebih baik hari ini untuk melakukan "deteksi fitur" di atas "deteksi browser". Tanyakan apakah browser melakukan apa yang Anda butuhkan.
Chris Rogers

2
@ Chris - permintaan maaf ... dimaksudkan untuk memiliki nada canda yang lebih banyak. Saya akan menyalahkan IE karena mencuri kesenangan saya dan meninggalkan saya dengan kepahitan dan frustrasi. :)
JDB masih mengingat Monica

Jawaban:


477

Gunakan metode JavaScript di bawah ini:

function msieversion() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

Anda dapat menemukan detail di situs dukungan Microsoft di bawah ini:

Cara menentukan versi browser dari skrip

Pembaruan: (dukungan IE 11)

function msieversion() {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

27
meskipun ini akan bekerja dengan baik karena variabel ua tidak akan pernah mulai dengan MSIE, menulis if (msie > 0)itu menyesatkan. Jika nilainya tidak ditemukan, fungsi indexOf () mengembalikan -1 bukan 0. Dengan demikian if (msie > -1)akan lebih jelas.
Neville Nazerane

61
Ini mengembalikan NaN di IE11, untuk saya.
verism

7
@verism dan lainnya: periksa jawaban ini yang juga berfungsi untuk IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri

8
navigator.userAgent.indexOf ("MSIE")> 0 || navigator.userAgent.indexOf ("Trident")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe

12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Saya tahu ini berfungsi pada 10 dan 11. Jika Anda dapat memverifikasi <IE9 dan Edge, edit jawaban.
Indolering

595

Beberapa tahun kemudian, dan browser Edge sekarang menggunakan Chromium sebagai mesin renderingnya.
Memeriksa IE 11 masih merupakan hal yang menyedihkan.

Berikut adalah pendekatan yang lebih mudah, karena versi IE kuno harus hilang.

if (window.document.documentMode) {
  // Do IE stuff
}

Inilah jawaban lama saya (2014):

In Edge String Agen Pengguna telah berubah.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        // IE 10 or older => return version number
        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
    }

    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
        // IE 11 => return version number
        var rv = ua.indexOf('rv:');
        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
    }

    var edge = ua.indexOf('Edge/');
    if (edge > 0) {
       // Edge => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Penggunaan sampel:

alert('IEEdge ' + detectIEEdge());

String default IE 10:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

String default IE 11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

String default Edge 12:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0 

String default Edge 13 (thx @DrCord):

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586 

String default Edge 14:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

String default Edge 15:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

String default Edge 16:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

String default Edge 17:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

String default Edge 18 (Pratinjau orang dalam):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Tes di CodePen:

http://codepen.io/gapcode/pen/vEJNZN


4
Terima kasih telah berkomentar. Saya belum memverifikasi jawaban Anda, tetapi saya ingin mengomentari satu hal: Sebagai yang pertama 'jika' berisi 'kembali', Anda tidak perlu 'lagi' setelahnya.
Mario

30
Hanya ingin tahu, mengapa mereka mengubah garis agen pengguna di versi baru IE? MS benar-benar tidak ingin kita mendeteksi peramban web yang buruk.
c00000fd

3
@SameerAlibhai Kedengarannya bagus dalam teori tetapi dalam praktiknya, terutama saat ini, itu tidak praktis. Terkadang timbul masalah bahwa deteksi "fitur" tunggal tidak mencakup dan ditambah fitur tertentu memiliki kebiasaan implementasi yang hanya dapat dikerjakan dengan pengetahuan tentang browser. Bagaimana jika saya ingin melakukan sesuatu yang sederhana seperti mengumpulkan statistik browser?
Sedikit

34
Perlu dicatat bahwa Edge tidak benar-benar 'IE12' tetapi sebenarnya adalah browser yang sepenuhnya terpisah. Windows 10 hadir dengan IE11 dan Edge diinstal.
moloko

16
kebencian saya untuk IE tumbuh
Kolob Canyon

135

Jika yang ingin Anda ketahui adalah apakah browser itu IE atau tidak, Anda bisa melakukan ini:

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

Pembaruan 1: Metode yang lebih baik

Saya merekomendasikan ini sekarang. Itu masih sangat mudah dibaca dan jauh lebih sedikit kode :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

Terima kasih kepada JohnnyFun dalam komentar untuk jawaban singkatnya :)

Pembaruan 2: Menguji IE dalam CSS

Pertama, jika Anda bisa, Anda harus menggunakan @supportspernyataan dan bukannya JS untuk memeriksa apakah browser mendukung fitur CSS tertentu.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Perhatikan bahwa IE tidak mendukung @supportssama sekali dan akan mengabaikan gaya apa pun yang ditempatkan di dalam @supportspernyataan.)

Jika masalah tidak dapat diselesaikan dengan @supportsmaka Anda dapat melakukan ini:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Catatan: classListrelatif baru untuk JS dan saya pikir, dari browser IE, itu hanya bekerja di IE11. Mungkin juga IE10.)

Jika Anda menggunakan SCSS (Sass) dalam proyek Anda, ini dapat disederhanakan untuk:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

Pembaruan 3: Menambahkan Microsoft Edge (tidak disarankan)

Jika Anda juga ingin menambahkan Microsoft Edge ke dalam daftar, Anda dapat melakukan hal berikut. Namun saya tidak merekomendasikannya karena Edge adalah browser yang jauh lebih kompeten daripada IE.

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge specific code goes here
}

5
Atau sama dalam beberapa byte: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Trident /'); ;-)
Simon Steinberger

12
Versi saya jauh lebih masuk akal bagi manusia tetapi byte lebih sedikit selalu baik :)
Daniel Tonon

7
ataums_ie = !!ua.match(/MSIE|Trident/)
xori

5
or ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun

1
@SimonSteinberger apakah ~ada artinya?
1,21 gigawatt

45

Ini mengembalikan trueuntuk semua versi Internet Explorer:

function isIE(userAgent) {
  userAgent = userAgent || navigator.userAgent;
  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1;
}

The userAgentparameter opsional dan default ke agen pengguna browser.


Ini seharusnya bagus tetapi Anda pada dasarnya lupa untuk menetapkan nilai "return true" atau "return 1" default untuk browser IE. Ini saat ini tidak mengembalikan nilai apa pun ketika browser IE terdeteksi.
Vincent Edward Gedaria Binua

10
Mengapa Anda ingin memperlakukan Edge sebagai IE? Dalam hal kompatibilitas, mereka memiliki sedikit kesamaan saat ini.
minexew

@docta_faustus userAgent adalah parameter, bukan global
bendytree

29

Ini adalah bagaimana tim Angular melakukan itu ( v 1.6.5 ):

var msie, // holds major version number for IE, or NaN if UA is not IE.

// Support: IE 9-11 only
/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
msie = window.document.documentMode;

Lalu ada beberapa baris kode yang tersebar di seluruh menggunakannya sebagai nomor seperti

if (event === 'input' && msie <= 11) return false;

dan

if (enabled && msie < 8) {

window.document.documentMode tidak terdefinisi dalam MS Edge
Veselin Vasilev

25
itu tidak terdefinisi dalam MS Edge karena MS Edge bukan IE!
JCKödel

1
document.documentModedidukung oleh IE8 +. Ini 'undefined'untuk Edge atau Chrome / FireFox .... Saya mengubah kode ini var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);sedemikian rupa sehingga mengembalikan versi IE yang tepat untuk IE8 +, 99 untuk browser non-IE (biasanya itu akan menjadi browser modern), dan 1 untuk IE5-7 lama. Ini ditulis seperti itu karena kita biasanya memerlukan pekerjaan khusus hanya untuk beberapa IE yang lebih tua. Jadi, if (IEver < 9) { ... }berarti jika itu adalah IE lama
S.Serpooshan

29

Anda dapat menggunakan objek navigator untuk mendeteksi pengguna-navigator, Anda tidak perlu jquery untuk itu

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

http://www.javascriptkit.com/javatutors/navigator.shtml


4
Ini memberi saya salah untuk IE11 saya
Curtis

2
Agen pengguna IE11 berbeda dari MSIE (XX); IE11 akan ditemukan dengan memeriksa Trident.
Orpheus

Ini memberikan false positive di Firefox 45.0.2.
Tim S. Van Haren

indeks tes salah. Jika tidak mengembalikan benar atau salah seperti fungsi tes regex Anda telah melakukan navigator.userAgent.indexOf ("Trident /")! = -1
Dahar Youssef

10

Menggunakan jawaban di atas; Boolean pengembalian sederhana & kental:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);


1
Mengembalikan nilai false di FireFox 44.0.2 pada Widnows 10. Versi FireFox apa yang mengembalikan true @ SiKni8?
Arthur Hebert

9

Metode 01:
$ .browser sudah tidak digunakan lagi di jQuery versi 1.3 dan dihapus di 1.9

if ( $.browser.msie) {
  alert( "Hello! This is IE." );
}

Metode 02:
Menggunakan Komentar Bersyarat

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

Metode 03:

 /**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }

    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
    }

    alert( msg );
}

Metode 04:
Gunakan JavaScript / Deteksi Manual

/*
     Internet Explorer sniffer code to add class to body tag for IE version.
     Can be removed if your using something like Modernizr.
 */
 var ie = (function ()
 {

     var undef,
     v = 3,
         div = document.createElement('div'),
         all = div.getElementsByTagName('i');

     while (
     div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->',
     all[0]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

Tautan Referensi


@radhe Saya telah memperbarui jawabannya semoga ini bekerja untuk Anda.
Aamir Shahzad

Sebagai catatan: Metode 2 tidak akan berfungsi di IE10 atau lebih baik dalam mode standar. Untuk informasi lebih lanjut: Komentar bersyarat tidak lagi didukung
insertusernamehere

@insertusername di sini Anda sangat benar, untuk itu saya pikir penggunaan .ie10kelas adalah salah satu pilihan terbaik jika Anda melakukan beberapa perbaikan css untuk ie10 saja. Saat internet explorer 10 menambahkan ".ie10"kelas ke elemen HTML <html class="ie10">, Anda dapat menggunakannya seperti.ie10 .myclass {//some css here}
Aamir Shahzad

8

Saya hanya ingin memeriksa apakah browser itu IE11 atau lebih tua, karena yah, mereka omong kosong.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}

2
ini mendapatkan suara saya untuk penghargaan tinggi untuk penamaan standar konvensi
redbandit

7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}

Tidak menjawab pertanyaan. Edge bukan IE.
hda

hda, tanggal pertanyaan dari 2013, saya pikir hari ini, menarik untuk tidak mengabaikan "Edge"
Boss COTIGA

5

Menggunakan modernizr

Modernizr.addTest('ie', function () {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf('MSIE ') > 0;
    var ie11 = ua.indexOf('Trident/') > 0;
    var ie12 = ua.indexOf('Edge/') > 0;
    return msie || ie11 || ie12;
});

Tidak menjawab pertanyaan karena Edge bukan IE. Edge juga bukan IE12. Saat Tepi berbasis Chromium dirilis, Anda juga harus menambahkan Chrome atau Opera ke daftar ini. (Apa pun yang ingin Anda capai dengan ini, akan lebih mudah untuk mendeteksi Firefox)
hda

5

Atau versi yang sangat singkat ini, mengembalikan true jika browser adalah Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}

4

Namun fungsi sederhana lainnya (belum dapat dibaca manusia) untuk mendeteksi apakah browser itu IE atau tidak (mengabaikan Edge, yang tidak buruk sama sekali):

function isIE() {
  var ua = window.navigator.userAgent;
  var msie = ua.indexOf('MSIE '); // IE 10 or older
  var trident = ua.indexOf('Trident/'); //IE 11

  return (msie > 0 || trident > 0);
}

3

Jika Anda tidak ingin menggunakan agen pengguna, Anda juga bisa melakukan ini untuk memeriksa apakah browsernya IE. Kode yang dikomentari sebenarnya berjalan di browser IE dan mengubah "false" menjadi "true".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   

1
IE11 tidak mendukung kompilasi bersyarat
Gabriel Llamas

Saya baru saja mencoba ini dan masih berhasil. Apakah Anda yakin itu tidak mendukungnya?
dev4life

3

Saya tahu ini adalah pertanyaan lama, tetapi kalau-kalau ada orang yang menemukannya lagi dan memiliki masalah dalam mendeteksi IE11, berikut adalah solusi yang berfungsi untuk semua versi IE saat ini.

var isIE = false;
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
    isIE = true;   
}

3

Saya sudah menggunakan ini

function notIE(){
    var ua = window.navigator.userAgent;
    if (ua.indexOf('Edge/') > 0 || 
        ua.indexOf('Trident/') > 0 || 
        ua.indexOf('MSIE ') > 0){
       return false;
    }else{
        return true;                
    }
}

2

Banyak jawaban di sini, dan saya ingin menambahkan masukan saya. IE 11 telah menjadi seperti keledai mengenai flexbox (lihat semua masalah dan inkonsistensi di sini ) yang saya benar-benar membutuhkan cara mudah untuk memeriksa apakah pengguna menggunakan browser IE (hingga dan termasuk 11) tetapi tidak termasuk Edge, karena Edge sebenarnya cukup bagus.

Berdasarkan jawaban yang diberikan di sini, saya menulis fungsi sederhana mengembalikan variabel boolean global yang kemudian dapat Anda gunakan di telepon. Sangat mudah untuk memeriksa IE.

var isIE;
(function() {
    var ua = window.navigator.userAgent,
        msie = ua.indexOf('MSIE '),
        trident = ua.indexOf('Trident/');

    isIE = (msie > -1 || trident > -1) ? true : false;
})();

if (isIE) {
    alert("I am an Internet Explorer!");
}

Dengan cara ini Anda hanya perlu melakukan look up sekali, dan Anda menyimpan hasilnya dalam variabel, daripada harus mengambil hasilnya pada setiap pemanggilan fungsi. (Sejauh yang saya tahu Anda bahkan tidak perlu menunggu dokumen siap untuk mengeksekusi kode ini karena agen-pengguna tidak terkait dengan DOM.)


2

Coba ini jika Anda menggunakan versi jquery> = 1.9 ,

var browser;
jQuery.uaMatch = function (ua) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
        /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
        /(msie) ([\w.]+)/.exec(ua) || 
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
       /(Trident)[\/]([\w.]+)/.exec(ua) || [];

    return {
        browser: match[1] || "",
        version: match[2] || "0"
    };
};
// Don't clobber any existing jQuery.browser in case it's different
if (!jQuery.browser) {
    matched = jQuery.uaMatch(navigator.userAgent);
    browser = {};

    if (matched.browser) {
        browser[matched.browser] = true;
        browser.version = matched.version;
    }

    // Chrome is Webkit, but Webkit is also Safari.
    if (browser.chrome) {
        browser.webkit = true;
    } else if (browser.webkit) {
        browser.safari = true;
    }

    jQuery.browser = browser;
}

Jika menggunakan versi jQuery <1.9 ($ .browser dihapus di jQuery 1.9) gunakan kode berikut sebagai gantinya:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});

Terima kasih untuk ini. Sayangnya kami masih dalam versi 1.7.2 dan belum dapat mengubahnya.
user2571510

Sejauh yang saya bisa lihat, ini tidak memperhitungkan IE yang lebih baru, yang didasarkan pada mesin Trident.
Bram Vanroy

Diperbarui untuk IEs terbaru berdasarkan Trident
Rohan Kumar

1

Solusi @ SpiderCode tidak bekerja dengan IE 11. Ini adalah solusi terbaik yang saya gunakan untuk selanjutnya dalam kode saya di mana saya perlu deteksi browser untuk fitur tertentu.

IE11 tidak lagi dilaporkan sebagai MSIE, menurut daftar perubahan ini, sengaja untuk menghindari kesalahan deteksi.

Apa yang dapat Anda lakukan jika Anda benar-benar ingin tahu itu adalah untuk mendeteksi Trident / string di agen pengguna jika navigator.appName mengembalikan Netscape, sesuatu seperti (yang belum diuji);

Terima kasih atas jawaban ini

function isIE()
{
  var rv = -1;
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  else if (navigator.appName == 'Netscape')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv == -1 ? false: true;
}

1

Di bawah ini saya menemukan cara yang elegan untuk melakukan ini saat googling ---

/ detect IE
var IEversion = detectIE();

if (IEversion !== false) {
  document.getElementById('result').innerHTML = 'IE ' + IEversion;
} else {
  document.getElementById('result').innerHTML = 'NOT IE';
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // IE 12 / Spartan
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge (IE 12+)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}

1
Ini persis kode dari pena saya di CodePen , yang merupakan bagian dari jawaban saya untuk pertanyaan ini . ;-)
Mario

1
Ya, saya menggunakan orang yang sama tetapi stack-overflow tidak ingin membagikan tautan. akan memperbarui tautan dalam referensi di sini dan seterusnya. Terima kasih atas kerja bagus Mario.
Rameshwar Vyevhare

1

Perbarui ke jawaban SpiderCode untuk memperbaiki masalah di mana string 'MSIE' mengembalikan -1 tetapi cocok dengan 'Trident'. Dulu mengembalikan NAN, tetapi sekarang mengembalikan 11 untuk versi IE.

   function msieversion() {
       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       if (msie > -1) {
           return ua.substring(msie + 5, ua.indexOf(".", msie));
       } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) {
           return 11;
       } else {
           return false;
       }
    }

0

Anda dapat mendeteksi semua Internet Explorer (Versi Terakhir Diuji 12).

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

Lihat di sini https://jsfiddle.net/v7npeLwe/


0
function msieversion() {
var ua = window.navigator.userAgent;
console.log(ua);
var msie = ua.indexOf("MSIE ");

if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { 
    // If Internet Explorer, return version numbe
    // You can do what you want only in IE in here.
    var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
    if (isNaN(version_number)) {
        var rv_index=ua.indexOf("rv:");
        version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index)));
    }
    console.log(version_number);
} else {       
    //other browser   
    console.log('otherbrowser');
}
}

Anda akan melihat hasilnya di konsol, silakan gunakan chrome Inspect.


0

Saya telah menempatkan kode ini di fungsi siap dokumen dan hanya memicu di internet explorer. Diuji di Internet Explorer 11.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}

0

Ini hanya bekerja di bawah versi IE 11.

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("version number",ie_version);


0

Fungsi JavaScript untuk mendeteksi versi Internet Explorer atau Edge

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}

0

Necromancing.

Agar tidak bergantung pada string agen pengguna, cukup periksa beberapa properti:

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

Juga, ini mendeteksi Chredge baru (Anaheim):

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Dan ini mendeteksi kromium:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Dan Safari ini:

if(window.safari)
{
    console.log("Safari, yeah!");
}

-1

Coba lakukan seperti ini

if ($.browser.msie && $.browser.version == 8) {
    //my stuff

}

jQuery menghentikan ini dalam 1,3 dan sepenuhnya dihapus pada 1,9.
geca

-1

Saya pikir ini akan membantu Anda di sini

function checkIsIE() {
    var isIE = false;
    if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
        isIE = true;
    }
    if (isIE)  // If Internet Explorer, return version number
    {
        kendo.ui.Window.fn._keydown = function (originalFn) {
            var KEY_ESC = 27;
            return function (e) {
                if (e.which !== KEY_ESC) {
                    originalFn.call(this, e);
                }
            };
        }(kendo.ui.Window.fn._keydown);

        var windowBrowser = $("#windowBrowser").kendoWindow({
            modal: true,
            id: 'dialogBrowser',
            visible: false,
            width: "40%",
            title: "Thông báo",
            scrollable: false,
            resizable: false,
            deactivate: false,
            position: {
                top: 100,
                left: '30%'
            }
        }).data('kendoWindow');
        var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.