it-swarm.dev

كيفية الكشف عن IE11؟

عندما أرغب في اكتشاف IE أستخدم هذا الرمز:

function getInternetExplorerVersion()
{
  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 );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    msg = "You are using IE " + ver;
  }
  alert( msg );
}

لكن IE11 تقوم بإرجاع "أنت لا تستخدم Internet Explorer". كيف يمكنني اكتشافه؟

199
user2591042

لم تعد IE11 تقدم تقارير باسم MSIE ، وفقًا لـ قائمة التغييرات هذه إنها مقصودة لتجنب سوء الكشف.

ما يمكنك القيام به إذا كنت حقًا تريد أن تعرف أنه IE هو اكتشاف سلسلة Trident/ في وكيل المستخدم إذا أرجعت navigator.appNameNetscape ، شيء مثل (غير مجرب) ؛

function getInternetExplorerVersion()
{
  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;
}

console.log('IE version:', getInternetExplorerVersion());

لاحظ أن IE11 (afaik) لا يزال قيد المعاينة ، وقد يتغير وكيل المستخدم قبل الإصدار.

213
Joachim Isaksson

استخدم !(window.ActiveXObject) && "ActiveXObject" in window للكشف عن IE11 بشكل صريح.

للكشف عن أي إصدار من إصدار [IE (pre-Edge ، "Trident") ، استخدم "ActiveXObject" in window بدلاً من ذلك.

84
mcw0933

استخدم MSInputMethodContext كجزء من فحص الكشف عن الميزة. فمثلا:

//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;

المراجع

35
Paul Sweatte

لقد قرأت إجاباتك وقدمت مزيج. يبدو أنه يعمل مع Windows XP (IE7/IE8) و Windows 7 (IE9/IE10/IE11).

function ie_ver(){  
    var iev=0;
    var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
    var trident = !!navigator.userAgent.match(/Trident\/7.0/);
    var rv=navigator.userAgent.indexOf("rv:11.0");

    if (ieold) iev=new Number(RegExp.$1);
    if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
    if (trident&&rv!=-1) iev=11;

    return iev;         
}

بالطبع إذا عدت 0 ، فهذا يعني عدم وجود IE.

15
Fabio

الحصول على IE نسخة من وكيل المستخدم

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

كيف يعمل: سلسلة وكيل المستخدم لجميع الإصدارات IE تتضمن جزءًا "MSIE spaceversion" أو "Trident other-text rv space-or-colonversion". مع العلم بذلك ، فإننا نحصل على رقم الإصدار من تعبير String.match() العادي. يتم استخدام كتلة try-catch لتقصير الرمز ، وإلا فإننا نحتاج إلى اختبار حدود الصفيف للمتصفحات التي لا تستخدم IE.

ملاحظة: يمكن خداع وكيل المستخدم أو حذفه ، وأحيانًا عن غير قصد إذا قام المستخدم بتعيين المستعرض الخاص به على "وضع التوافق". على الرغم من أن هذا لا يبدو مثل الكثير من القضايا في الممارسة العملية.


الحصول على IE إصدار بدون وكيل المستخدم

var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 : 
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 : 
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );

كيف يعمل: يضيف كل إصدار من IE دعمًا لـ ميزات إضافية غير موجود في الإصدارات السابقة. حتى نتمكن من اختبار الميزات بطريقة من أعلى لأسفل. يتم استخدام ternary sequence هنا للإيجاز ، على الرغم من أن عبارات if-then و switch ستعمل بنفس الطريقة. يتم تعيين المتغير ie على عدد صحيح 5-11 ، أو 1 لكبار السن ، أو 99 للأحدث/غير IE. يمكنك ضبطه على 0 إذا كنت ترغب فقط في اختبار IE 1-11 بالضبط.

ملاحظة: قد ينقطع اكتشاف الكائنات إذا تم تشغيل الرمز الخاص بك على صفحة بها برامج نصية لجهة خارجية تضيف ملفات متعددة لأشياء مثل document.addEventListener. في مثل هذه الحالات يكون وكيل المستخدم هو الخيار الأفضل.


اكتشاف ما إذا كان المتصفح حديثًا

إذا كنت مهتمًا فقط بما إذا كان المتصفح يدعم معظم معايير HTML 5 و CSS 3 أم لا ، يمكنك تفترض بشكل معقول أن IE 8 وتظل التطبيقات الأساسية المشكلة. يمنحك اختبار window.getComputedStyle مزيجًا جيدًا إلى حد ما من المتصفحات الحديثة ، (IE 9 و FF 4 و Chrome 11 و Safari 5 و Opera 11.5). IE 9 تتحسن بشكل كبير في دعم المعايير ، لكن الرسوم المتحركة الأصلية لـ CSS تتطلب IE 10.

var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) ); 
11
Beejor

الزاوي JS يفعل بهذه الطريقة.

msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
  msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}

سيكون رقم msie موجبًا إذا كان IE و NaN لمتصفح آخر مثل chrome و firefox.

لماذا ا ؟

اعتبارًا من Internet Explorer 11 ، تغيرت سلسلة وكيل المستخدم بشكل ملحوظ.

راجع هذا:

msdn # 1msdn # 2

9
Vishal Sharma

حل :

function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");
  // If IE, return version number.
  if (Idx > 0)
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./))
    return 11;

  else
    return 0; //It is not IE

}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
  alert("This is IE " + GetIEVersion());
}else {
  alert("This no is IE ");
}               
7
coperniko

أنا أستخدم طريقة أكثر بساطة:

يحتوي الكائن المستكشف العمومي على نقاط اتصال خاصية ، في Internet Exlorer 11 يسمى msMaxTouchPoints tho.

إذا كنت تبحث عن:

navigator.msMaxTouchPoints !== void 0 

ستجد Internet Explorer 11.

3
Dvid Silva
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
2
areschen

جرب هذا:

var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
2
Krunal

يبدو أن هذه طريقة أفضل. "indexOf" ترجع -1 إذا لم تتم مطابقة أي شيء. إنها لا تحل محل الطبقات الموجودة على الجسم ، بل تضيفها فقط.

// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
    document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
    document.body.className = document.body.className+' ie10';
}
1
joe

اكتشف معظم المتصفحات باستخدام هذا:

var getBrowser = function(){
  var navigatorObj = navigator.appName,
      userAgentObj = navigator.userAgent,
      matchVersion;
  var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
  if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
  //mobile
  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
    return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
  }
  // web browser
  return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};

https://Gist.github.com/earlonrails/5266945

0
earlonrails

بصراحة ، أود أن أقول استخدام مكتبة تقوم بما تحتاج إليه (مثل platform.js على سبيل المثال). في مرحلة ما ستتغير الأمور وستكون المكتبة مجهزة لهذه التغييرات وسيفشل التحليل اليدوي باستخدام التعبيرات المعتادة.

الحمد لله IE يذهب بعيدا ...

0
Matthias Hryniszak

فقط للمتصفح IE:

var ie = 'NotIE'; //IE5-11, Edge+
    if( !!document.compatMode ) {
        if( !("ActiveXObject" in window) ) ) ie = 'Edge';
        if( !!document.uniqueID){
            if('ActiveXObject' in window && !window.createPopup ){ ie = 11; }
            else if(!!document.all){
                    if(!!window.atob){ie = 10;}
                    else if(!!document.addEventListener) {ie = 9;}
                    else if(!!document.querySelector){ie = 8;}
                    else if(!!window.XMLHttpRequest){ie = 7;}
                    else if(!!document.compatMode){ie = 6;}
                    else ie = 5;
                }
        }
    }

استخدام التنبيه (أي) ؛

اختبارات:

var browserVersionExplorer = (function() {
    var ie = '<s>NotIE</s>',
        me = '<s>NotIE</s>';

    if (/msie\s|trident\/|Edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {
            if (!!window.MSInputMethodContext) {
                ie = !("ActiveXObject" in window) ? 'Edge' : 11;
            } else if (!!document.uniqueID) {
                if (!!(window.ActiveXObject && document.all)) {
                    if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {
                        ie = !!window.XMLHttpRequest ? 7 : 6;
                    } else {
                        ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;
                    }
                    if (!!document.documentMode && !!document.querySelector ) {
                        ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);
                    }
                } else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);
            }
        }
        
    return ie > 1 ? 'IE ' + ie : ie;
})();

 alert(browserVersionExplorer);

التحديث 01 يونيو 2017

الآن يمكننا استخدام شيء أسهل وأبسط:

var uA = window.navigator.userAgent,
    onlyIEorEdge = /msie\s|trident\/|Edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
    checkVersion = (onlyIEorEdge && +(/(Edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
0
James Peter

لقد استخدمت الحدث onscroll في العنصر مع شريط التمرير. عند تشغيله في IE ، أضفت المصادقة التالية:

onscroll="if (document.activeElement==this) ignoreHideOptions()"
0
Martin