我需要使用用户代理字符串检测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
有没有办法将它们组合成一个?
答案 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的标识符?