1. ホーム
  2. internet-explorer

[解決済み】IE11を検出する方法は?

2022-04-08 21:43:47

質問

IEを検出する場合、以下のコードを使用します。

function getInternetExplorerVersion()
{
  var rv = -1;
  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 )
  {
    msg = "You are using IE " + ver;
  }
  alert( msg );
}

しかし、IE11では"You're not using Internet Explorer"が返されます。どうすれば検出できるのでしょうか?

解決方法を教えてください。

として報告されなくなりました。 MSIE によると この変更点一覧 誤検出を防ぐための意図的なものです。

という場合にできること 本当に IEであることを知りたい場合は Trident/ の文字列がある場合、ユーザーエージェントは navigator.appName が返されます。 Netscape のような、(未検証の)ものです。

function getInternetExplorerVersion()
{
  var rv = -1;
  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 );
  }
  else if (navigator.appName == 'Netscape')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

console.log('IE version:', getInternetExplorerVersion());

IE11 はまだプレビュー版であり、リリース前にユーザーエージェントが変更される可能性があることに注意してください。