如何通过用户代理字符串检测IE7,省略以怪异模式运行的较新IE版本

时间:2012-05-15 08:24:21

标签: javascript regex user-agent

我需要使用用户代理字符串检测IE7(和IE6):

我做了以下正则表达式:

navigator.userAgent.match(/MSIE [67]\./)

但是,怪异模式下的IE9也与正则表达式匹配user agent

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 7.1; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)

我可以制作两个正则表达式:

navigator.userAgent.match(/MSIE [67]\./) !== null 
  && navigator.userAgent.match(/Trident\/5\.0/) === null

有没有办法将它们组合成一个?

3 个答案:

答案 0 :(得分:3)

假设Trident部分始终位于MSIE部分之后,您可以使用前瞻:

/MSIE [67]\.(?!.*Trident[5]\.0)/

我不熟悉用户代理字符串,但我猜测在怪癖模式下的IE10可能有三叉戟版本> 5,所以你可以把它改成:

/MSIE [67]\.(?!.*Trident[1-9])/

更新:编辑第二个正则表达式以包含早期版本的Trident,例如IE8中的Trident / 4.0,以及潜在的更高版本> = 10.

UPDATE2:清除RegEx在javascript中有效。

答案 1 :(得分:0)

我发布了与正则表达式一起制作的JavaScript解决方案....

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    if ( ver >= 8.0 ) 
      msg = "You're using a recent copy of Internet Explorer."
    else
      msg = "You should upgrade your copy of Internet Explorer.";
  }
  alert( msg );
}

此解决方案实际上是我的Microsoft,您可以参考this link

答案 2 :(得分:0)

也许不是相关的,但为什么不尝试document&&document.documentMode?document.documentMode:variable,其中variable将成为不是IE的标识符?