How can I determine which version of IE a user is running in JavaScript?

后端 未结 12 1859
生来不讨喜
生来不讨喜 2021-02-04 04:48

In some existing code there is a test to see if the user is running IE, by checking if the object Browser.Engine.trident is defined and returns true.

But how can I deter

12条回答
  •  囚心锁ツ
    2021-02-04 05:04

    So IE8 compatibility view mode reports itself as IE7 even though it doesn't always behave the same. And for that, I give you this monster:

        // IE8's "Compatibility mode" is anything but.  Oh well, at least it doesn't take 40 lines of code to detect and work around it.
    // Oh wait:
    /*
     * Author: Rob Reid
     * CreateDate: 20-Mar-09
     * Description: Little helper function to return details about IE 8 and its various compatibility settings either use as it is
     * or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is
     * very common so use with caution.
    */
    function IEVersion(){
        var _n=navigator,_w=window,_d=document;
        var version="NA";
        var na=_n.userAgent;
        var ieDocMode="NA";
        var ie8BrowserMode="NA";
        // Look for msie and make sure its not opera in disguise
        if(/msie/i.test(na) && (!_w.opera)){
            // also check for spoofers by checking known IE objects
            if(_w.attachEvent && _w.ActiveXObject){        
                // Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7
                version = (na.match( /.+ie\s([\d.]+)/i ) || [])[1];
                // Its IE 8 pretending to be IE 7 or in compat mode        
                if(parseInt(version)==7){                
                    // documentMode is only supported in IE 8 so we know if its here its really IE 8
                    if(_d.documentMode){
                        version = 8; //reset? change if you need to
                        // IE in Compat mode will mention Trident in the useragent
                        if(/trident\/\d/i.test(na)){
                            ie8BrowserMode = "Compat Mode";
                        // if it doesn't then its running in IE 7 mode
                        }else{
                            ie8BrowserMode = "IE 7 Mode";
                        }
                    }
                }else if(parseInt(version)==8){
                    // IE 8 will always have documentMode available
                    if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";}
                }
                // If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions            
                ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5                               
            }
        }
    
        return {
            "UserAgent" : na,
            "Version" : version,
            "BrowserMode" : ie8BrowserMode,
            "DocMode": ieDocMode
        }            
    }
    var ieVersion = IEVersion();
    var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8;
    

提交回复
热议问题