【问题标题】:detect internet explorer version using modernizr使用 modernizr 检测 Internet Explorer 版本
【发布时间】:2023-03-25 04:45:01
【问题描述】:

我是使用modernizr 的新手,但据我了解它的基本用途,它可以检测浏览器的功能。在这个 SO 帖子中:Request.Browser.Browser in chrome returning "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 的某些版本号,让用户知道他们正在使用不受支持的浏览器版本,这样他们就不会达到失败是个问题。

【问题讨论】:

  • 获取特定版本比听起来更难,部分原因是解析用户代理字符串是执行此操作的“官方”方式,并且多年来一直是varied a great deal。通常,大多数人只是寻找他们需要的功能,如果这些功能不可用,则会显示一条消息。 (另外,用户代理字符串根据“浏览器模式”和其他用户可控制的设置而变化,所以确实不可靠。)
  • @LanceLeonard 感谢您的回复。我发现了一个非现代化的解决方法,但我不想发布答案,因为它与 OP 无关。

标签: javascript internet-explorer modernizr


【解决方案1】:

UserAgent 嗅探很糟糕,因为 IE 可以在请求标头中发送任何旧的 UAS,具体取决于请求标头、页面元或企业站点模式列表中的 x-ua 设置。下面是一个基于特征检测来检测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 或更低版本的仿真模式以进行测试。在 Emulation 选项卡上,您还可以自定义请求 UserAgent 字符串以测试任何服务器端浏览器上限假设。

通用功能测试是 if('addEventListener' in window)// 这表明客户端浏览器至少使用 IE9 仿真或者是“现代”浏览器。 MS官方只支持IE11(可以假设任何低版本IE的Emulation Mode)。有关按浏览器版本支持的功能的完整列表,请参阅 caniuse.com。请记住,在 IE 中,您正在测试它所假设的浏览器仿真模式中的功能支持(由 x-ua 标头/元或企业站点模式列表设置),而不是其在导航器对象中的版本号或版本号或更新版本 KB “关于”菜单中的编号。

【讨论】:

  • win.WebGLRenderingContext 应该是 window.WebGLRenderingContext。
【解决方案2】:

由于某些时间限制,我不得不使用另一种方法来解决此问题。我们决定使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2012-11-29
    • 2012-03-10
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多