簡體   English   中英

使用modernizr檢測Internet Explorer版本

[英]detect internet explorer version using modernizr

我對使用modernizr並不陌生,但據我所知,它的基本用途是,它可以檢測瀏覽器的功能。 在此SO Post: chrome中的Request.Browser.Browser返回“ IE”的第一個答案中,這意味着可以在后面的代碼中完成此操作。

 string s = "Browser Capabilities\n"
            + "Type = " + browser.Type + "\n"
            + "Name = " + browser.Browser + "\n"
            + "Version = " + browser.Version + "\n"
            + "Major Version = " + browser.MajorVersion + "\n"
            + "Minor Version = " + browser.MinorVersion + "\n"
            + "Platform = " + browser.Platform + "\n"
            + "Is Beta = " + browser.Beta + "\n"
            + "Is Crawler = " + browser.Crawler + "\n"
            + "Is AOL = " + browser.AOL + "\n"
            + "Is Win16 = " + browser.Win16 + "\n"
            + "Is Win32 = " + browser.Win32 + "\n"
            + "Supports Frames = " + browser.Frames + "\n"
            + "Supports Tables = " + browser.Tables + "\n"
            + "Supports Cookies = " + browser.Cookies + "\n"
            + "Supports VBScript = " + browser.VBScript + "\n"
            + "Supports JavaScript = " +
                browser.EcmaScriptVersion.ToString() + "\n"
            + "Supports Java Applets = " + browser.JavaApplets + "\n"
            + "Supports ActiveX Controls = " + browser.ActiveXControls
                  + "\n"
            + "Supports JavaScript Version = " +
                browser["JavaScriptVersion"] + "\n"; 

這也可以在Modernizr中本地完成,還是有類似的功能可以完成預期的任務?

更新:澄清一下,這樣做的目的是為了能夠檢測Internet Explorer的某些版本號,以使用戶知道他們使用的是不受支持的瀏覽器版本,以使他們不會到達出現故障的位置一個問題。

UserAgent Sniffing不好,因為IE可以根據請求標頭,頁面元或企業站點模式列表中的x-ua設置在請求標頭中發送任何舊的UAS。 這是一個基於功能檢測的客戶端慣用法,用於檢測IE仿真模式。

function getIEVersion(odoc){
if (odoc.body.style.scrollbar3dLightColor!=undefined)
    {
    if (!!win.WebGLRenderingContext) {return 'IE11';}
    else if (odoc.body.style.msGridRows!=undefined) {return 'IE10';}
    else if (odoc.body.style.opacity!=undefined) {return 'IE9';}
    else if (odoc.body.style.msBlockProgression!=undefined) {return 'IE8';}
    else if (odoc.body.style.msInterpolationMode!=undefined) {return 'IE7';}
    else if (odoc.body.style.textOverflow!=undefined) {return 'IE6'}
    else {return 'IE5.5 or lower';}
    }
}

用法:var EmulationVersion = getIEVersion(document);

使用開發工具的“仿真”選項卡更改要測試的IE11或更低版本的仿真模式。 在“仿真”選項卡上,您還可以自定義請求UserAgent字符串,以測試任何服務器端瀏覽器上限假設。

通用功能測試是if('window'中的'addEventListener')//,它指示客戶端瀏覽器至少使用IE9仿真或為“現代”瀏覽器。 正式地,MS僅支持IE11(可以采用IE較低版本的任何仿真模式)。 有關瀏覽器版本支持的功能的完整列表,請參見caniuse.com。 記住,在IE中,您正在假設它是在瀏覽器“仿真模式”中測試功能支持(由x-ua標頭/元或企業站點模式列表設置),而不是其在導航器對象中的版本號或版本號或更新版本KB關於菜單中的數字。

由於某些時間限制,我不得不使用另一種方法來解決此問題。 我們決定進行Javascript檢查,以查看問題的根源。 如果將來有人需要解決類似的問題,我會發布我的成功結果。

ar version = detectIE();

if (version === false) {
    document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
    document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
    document.getElementById('result').innerHTML = 'IE ' + version;
    if (version == 11) {
        ('#browserNotSupported').modal('show')
        alert('This is still firing')
    }
    console.log(version)
}


// 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;


    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;
}

在此地址找到: https : //codepen.io/gapcode/pen/vEJNZN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM