Windows Internet Explorer がユーザー エージェント文字列として報告する内容

注 : このドキュメントは暫定版であり、変更される場合があります。

ユーザー エージェント文字列は、HTTP トラフィックを通じて Web サイトにレポートされるブラウザの ID です。Web 開発者は、ユーザー エージェント文字列を使用して、閲覧者が Web サイトの表示に使用しているブラウザを検出できます。ブラウザ検出のベスト プラクティスを理解することで、Windows Internet Explorer 8 クライアントによって表示されるときに、サイトが意図したとおりに動作を続けることを保証できます。

このドキュメントでは、ユーザー エージェント文字列の構造、および Windows Internet Explorer がサーバーに報告する値について説明します。また、推奨されるブラウザ検出手法の実装およびメンテナンスについて、Web 開発者を支援するためのコード例もいくつか示します。

ユーザーエージェント文字列について

Web ページを要求したときに、ブラウザは、アクセスしているサイトをホストする Web サーバーにいくつかのヘッダーを送信します。各ヘッダーには、要求した情報を提供するのに最適な方法を Web サーバーが判断するのに役立つ詳細情報が含まれます。ユーザー エージェントと呼ばれる 1 つのヘッダーは、サーバーに情報を要求しているアプリケーションを識別します。ユーザー エージェント文字列には、トークンと呼ばれる詳細情報がオプションで含まれる場合があります。トークンは、かっこで囲む必要があり、プログラムによって異なります。Windows Internet Explorer では、トークンを使用して、コンピュータ システムに関する追加の詳細情報を記述します。

図 1 に、Windows Internet Explorer によって報告されるユーザー エージェント文字列のサンプルを示します。トークンが強調されています。

図 1

歴史的な理由から、Windows Internet Explorer は自身を Mozilla 4.0 ブラウザとして識別します。

上記のユーザー エージェント文字列のサンプルには、3 つのトークンが含まれています。

  • "互換性フラグ" (ここでは "compatible" と示されています) は、最新のブラウザによって使用されます。このフラグは、Windows Internet Explorer が機能の共通セットと互換性があることを示します。
  • "バージョン トークン" は、ブラウザを識別し、バージョン番号を含みます。図 1 のバージョン トークン (MSIE 8.0) は、Windows Internet Explorer 8 を示しています。Windows Internet Explorer 7 は、バージョン トークン "MSIE 7.0" を返します。
  • "プラットフォーム トークン" は、オペレーティング システムを識別し、バージョン番号を含みます。図 1 のプラットフォーム トークン ("Windows NT 6.0") は、Windows Vista を示しています。

図 1 では、Windows Internet Explorer 8 がユーザー エージェントです。ただし、他のプログラムも、インターネット上でサーバーにアクセスするときにユーザー エージェント文字列を提供します。

ブラウザがユーザー エージェント文字列として送信する内容は、アドレス バーに次のコード行を入力することで簡単に判断できます。

javascript:alert(navigator.userAgent)

コードが実行されると、ブラウザのユーザー エージェント文字列全体を示すポップアップ警告メッセージが表示されます。

ユーザー エージェント文字列の詳細については、「ユーザー エージェント文字列を理解する」を参照してください。

ユーザーエージェント文字列を使用したブラウザ検出

クライアント側スクリプトを使用してユーザー エージェント文字列を解析し、バージョン トークンからバージョン番号を抽出して Windows Internet Explorer を検出できます。

次のコード例は、閲覧者が使用している Windows Internet Explorer のバージョンを判断するのに最適な手法を表す 2 つの Microsoft Jscript 関数を示しています。

function getInternetExplorerVersion()
// Windows Internet Explorer のバージョンまたは -1
// (他のブラウザが使用されていることを示す) を返します。
{
   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 = "Windows Internet Explorer を使用していません。";
   var ver = getInternetExplorerVersion();
   if ( ver> -1 )
   {
      if ( ver>= 8.0 )
         msg = "Windows Internet Explorer の最新版を使用しています。"
      else
         msg = "Windows Internet Explorer をアップグレードする必要があります。";
    }
   alert( msg );
}

この例では、関数 getInternetExplorerVersion() が、ブラウザによって送信されたユーザー エージェント文字列を解析し、バージョン番号を返します。関数 checkVersion() は getInternetExplorerVersion() を呼び出し、返された値をチェック対象のバージョン番号 (この例では、バージョン 8) と比較します。"以上" の比較が使用されていることがわかります。これにより、関数が将来のバージョンの Windows Internet Explorer に対応することが保証され、新しいバージョンの Windows Internet Explorer がリリースされた場合にコードを更新する必要がなくなります。

その他のブラウザ検出手法

バージョン ベクタは、ブラウザの起動時に読み取られるレジストリ キーに格納されている、Windows Internet Explorer の内部バージョン番号を表します。条件付きコメントをバージョン ベクタと共に使用して、ブラウザ バージョンを検出できます。ユーザー エージェント文字列の代わりに、またはユーザー エージェント文字列に加えてバージョン ベクタを使用して、Web サイトの表示に使用されるブラウザを検出することもできます。バージョン ベクタの詳細およびバージョン ベクタを使用したブラウザ バージョンの検出方法については、「バージョン ベクタ」を参照してください。

クライアント側スクリプトを使用する利点は、Windows Internet Explorer 以外のブラウザを検出できることです。スクリプトはまた、条件付きコメントより柔軟性があります。条件付きコメントは、カスタム CSS 設定などで、Windows Internet Explorer を明示的に指定する場合に効果的です。