使用IE10/IE11进行浏览器检测



我正试图根据用户使用的浏览器将用户重定向到某些页面,特别是如果是IE,则转到该页面,否则转到该页面的任何其他浏览器。。我有一个JavaScript函数运行良好,但在IE10/IE11问世后,它就不再工作了。结合使用其他代码,我想出了这个:

function get_browser()
{
    var N=navigator.appName, ua=navigator.userAgent, tem;
    var M=ua.match(/(opera|chrome|safari|firefox|msie)/?s*(.?d+(.d+)*)/i);
    if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
    return M[0];
}
function get_browser_version()
{
    var N=navigator.appName, ua=navigator.userAgent, tem;
    var M=ua.match(/(opera|chrome|safari|firefox|msie)/?s*(.?d+(.d+)*)/i);
    if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
    M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
    return M[1];
}
var browser=get_browser();
var browser_version=get_browser_version();
if ((browser=="msie")
&& (version>=4))
{
    if(browser=="opera"||"chrome"||"safari"||"firefox") {
        location.replace("mobile_demo.php"); }
    else { location.replace("full_demo.php"); }
}

然而,它不起作用。感谢您的帮助。谢谢

由于Pointy的帮助,正确的代码:

 function get_browser()
 {
     var N=navigator.appName, ua=navigator.userAgent, tem;
     var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)/?s*(.?d+(.d+)*)/i);
     if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
     M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
     return M[0];
 }
 //Optional to get browser version, not needed in this case
 function get_browser_version()
 {
     var N=navigator.appName, ua=navigator.userAgent, tem;
     var M=ua.match(/(opera|chrome|safari|firefox|msie|trident)/?s*(.?d+(.d+)*)/i);
     if(M && (tem= ua.match(/version/([.d]+)/i))!= null) M[2]= tem[1];
     M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
     return M[1];
 }
 var browser=get_browser();
 var browser_version=get_browser_version();
 if (browser=="MSIE"||browser=="Trident"){
    location.replace("full_demo.php"); }
    else {
    location.replace("mobile_demo.php"); }

此处的逻辑(重新格式化):

if ((browser=="msie") && (version>=4)) {
  if (browser=="opera"||"chrome"||"safari"||"firefox") {
    location.replace("mobile_demo.php");
  }
  else {
    location.replace("full_demo.php");
  }
}

如果浏览器是"msie",版本是4或更高版本,那么如果浏览器是"opera"、"chrome"、"safari"或"firefox",则转到移动演示,但如果不是这四种浏览器之一,则转到完整演示。

因此,您检查浏览器是否为"msie",然后检查它是否是其他四个浏览器中的一个。什么时候?从来没有,因为我们只在已知浏览器为"msie"时进行测试。它不能同时是"msie"和另一个,所以代码总是加载完整的演示,除非浏览器不是"msie",在这种情况下,它要么什么都不做,要么是你没有发布的东西。

编辑—如果你需要做的只是确定浏览器是否是IE:

if (browser == "msie")
  location.replace("full_demo.php");
else
  location.replace("mobile_demo.php");

然而,对于IE11,您将遇到这样的问题:Microsoft故意从useragent字符串中删除"MSIE"。为了解决这个问题,我想您可以更改正则表达式,使其与"三叉戟"字符串匹配。有关详细信息,请参阅此MSDN资源。

我已经开始使用特征检测来确定它是IE11还是IE10。他们处理指针事件的方式和我利用它的方式不同

if (window.navigator.msPointerEnabled && !window.PointerEvent){
  // Using feature detection we can diff between IE 11 and IE 10.
  // Pointer events were added in IE10 (window.PointerEvent).
  // The syntax changed in IE 11 (vendor prefix was removed).
  // If pointer events are supported - and - the new syntax is supported, we know it is IE 11.
  // If pointer events supported and the new syntax is not supported -- then we know it is IE 10.
  // do something for IE10 here
} else {
   // do something for IE11 here
}

最新更新