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

时间:2013-11-20 20:17:22

标签: javascript internet-explorer browser-detection

我正在尝试将用户重定向到某些页面,具体取决于他们使用的浏览器,特别是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"); }

2 个答案:

答案 0 :(得分:2)

你的逻辑(重新格式化):

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,你将遇到微软故意从useragent字符串中取出“MSIE”的问题。为了解决这个问题,你可以改变正则表达式,以便它匹配“Trident”字符串,我想。 See this MSDN resource for more details.

答案 1 :(得分:1)

我已经开始使用功能检测来确定它是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

}