4

ユーザー エージェント文字列を使用して IE7 (および IE6) を検出する必要があります。

次の正規表現を作成しました。

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

ただし、互換モードの IE9 は、正規表現を次のユーザー エージェントにも一致させます。

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)

2 つの正規表現を作成できます。

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

それらを1つにまとめる方法はありますか?

4

3 に答える 3

3

Trident 部分が常に MSIE 部分の後に来ると仮定すると、先読みを使用できます。

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

私はユーザー エージェント文字列に精通していませんが、おそらく IE10 の互換モードでは Trident バージョンが 5 よりも大きい可能性があるので、次のように変更できます。

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

更新: IE8 の Trident/4.0 など、以前のバージョンの Trident も含めるように編集された 2 番目の正規表現と、10 以上の新しいバージョンの可能性があります。

UPDATE2: JavaScript で有効になるように RegEx をクリーンアップしました。

于 2012-06-19T23:20:29.717 に答える
0

関連性がないかもしれませんが、IE ではないことを示す識別子がdocument&&document.documentMode?document.documentMode:variableどこにあるのか試してみませんか?variable

于 2014-11-19T09:49:02.273 に答える
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 );
}

このソリューションは実際に私のマイクロソフトに提供されています。このリンクを参照できます

于 2012-05-16T08:20:10.657 に答える