2017-03-20 95 views
0

我是新来使用Modernizr的,但据我所知它的根本目的,它可以检测浏览器的功能。在这种SO帖子:Request.Browser.Browser in chrome returning "IE"第一个回答意味着这可以在代码来完成后面。使用Modernizr的检测Internet Explorer版本

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的某些版本号,以使用户意识到他们正在使用不支持的浏览器版本,以便它们不会达到某个点失败是一个问题。

+0

获取特定版本是难度比它的声音,部分原因是解析用户代理字符串是“官方”的方式做到这一点,它的[变化很大(https://msdn.microsoft.com/en -us/library/hh869301(v = vs.85).aspx)。通常,大多数人只是寻找他们需要的功能,并显示一条消息,如果这些功能不可用。 (此外,用户代理字符串按“浏览器模式”等用户可控的设置而有所不同,所以真的不可靠的。) –

+0

@LanceLeonard感谢您的答复。我发现了一个非现代化的工作,但我不想发布答案,因为它与OP没有任何关系。 – jpears

+0

的可能的复制[正确的使用方法Modernizr的检测IE?](https://stackoverflow.com/questions/13478303/correct-way-to-use-modernizr-to-detect-ie) – Lijo

回答

1

的UserAgent嗅探是坏的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字符串以测试任何服务器端浏览器上限假设。

的通用特性测试是如果(在窗口“的addEventListener”)//这表明客户端浏览器是利用至少IE9仿真或者是“现代”浏览器。官方MS仅支持IE11(它可以假设任何低版本IE的仿真模式)。请参阅caniuse.com以获取浏览器版本的完整功能支持列表。请记住,在你的IE正在测试中,它是假设浏览器仿真模式(由X-UA头/元或企业网站的模式列表设置)功能支持,在导航的对象,而不是它的版本号或版本号或更新版本KB编号从关于菜单。

+0

win.WebGLRenderingContext应window.WebGLRenderingContext。 – Hampei

0

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

相关问题