navigatorオブジェクトについて
navigatorオブジェクトは、ブラウザ固有の情報を提供するオブジェクトです。JavaScriptは、もともとNetscape社がNetscape Navigatorに搭載するスクリプト言語として開発したものです。そのためブラウザに関する基本的な情報を持ったオブジェクトに「navigator」という名称が付いたのでしょう。navigatorオブジェクトの名称は、Internet Explorerをはじめ、その後発表されたJavaScript対応ブラウザにも踏襲されています。
もともとNetscape Navigatorでは、navigatorオブジェクトは、ナビゲータオブジェクト内のどの階層にも属さない独立したオブジェクトでした。これがInternet Explorerではwindowオブジェクトの下の階層に属しています。しかし、JavaScriptを記述する場合、windowオブジェクトは省略できるので、Netscape NavigatorでもInternet Explorerでも同じ用法でnavigatorオブジェクトを記述できます。そのため、両ブラウザのオブジェクトの階層構造の違いが問題になることはありません。
navigatorオブジェクトの下の階層には、ブラウザのMIMEタイプに関する情報をもった、mimeTypesオブジェクトと、プラグインに関する情報を持ったpluginsオブジェクトがあります。ここでnavigatorオブジェクトについて表2にまとめます。
| プロパティ | |
| JavaScript1.0 | |
appCodeName |
ブラウザのコード名 |
appName |
ブラウザのブラウザ名 |
appVersion |
ブラウザのバージョン |
userAgent |
ブラウザのユーザエージェント |
| JavaScript1.1 | |
mimeTypes |
MIMEタイプオブジェクト(配列) |
plugins |
プラグインオブジェクト(配列) |
| JavaScript1.2 | |
language |
ユーザーが選択した言語 |
platform |
ユーザーのプラットホームのタイプ |
| メソッド | |
| JavaScript1.0 | |
toString() |
オブジェクトを文字列に変える |
| JavaScript1.1 | |
javaEnabled() |
Javaが使えるか |
valueOf() |
オブジェクトの値を返す |
| javaScript1.3 | |
toSource() |
オブジェクトの値を文字列で返す |
| イベントハンドラ | |
| なし | |
この中でappNameプロパティ、appCodeNameプロパティ、appVersionプロパティ、userAgentプロパティ、さらにはplatformプロパティなどが、ブラウザの種類やバージョンの判断に利用できます。また、このうちappNameプロパティは、前々回の『ブラウザによるイベントの取り扱いの違いを吸収する』で、userAgentプロパティは、前回の『JavaScriptを使ってクライアントのOSに応じた処理を行う』で解説しているので、併せて参照して下さい。
それぞれのプロパティがどのような値を返すか、次のサンプルをいろいろなブラウザで実行し確認してみてください。
<script type="text/javascript"> <!-- document.write("ブラウザ名:",navigator.appName); document.write("<br>"); document.write("コード名:",navigator.appCodeName); document.write("<br>"); document.write("バージョン:",navigator.appVersion); document.write("<br>"); document.write("ユーザエージェント:",navigator.userAgent); document.write("<br>"); document.write("プラットホーム:",navigator.platform); //--> </script>
この中で、userAgentプロパティは、appCodeNameプロパティとappVersionプロパティを合わせた値となります。また、userAgentプロパティには、ブラウザの種類やバージョン、実行されているOSの種類といった、いろいろな情報が含まれている事が分かると思います。しかし同時に、ユーザエージェントの情報がそのままブラウザの実体を表しているわけではない、といったことにも気が付くのではないでしょうか。
それでは次に、このユーザエージェント情報について、さらに詳しく見ていくことにしましょう。
ユーザエージェントの情報を確認する(前半)
「ユーザエージェント」とは、特定のプロトコルに基づいてデータを利用するアプリケーションのことをいいます。HTTPを利用するアプリケーションの場合、ユーザエージェントに関する情報は、HTTPのヘッダー部分にあり、アプリケーションがサーバとデータのやり取りを行う時に、その情報が参照されます。このような用途から、ユーザエージェントの情報は、本来そのアプリケーションそのものを表すようになっているはずです。しかし、多くのブラウザでは、ユーザエージェントの情報が、そのまま素直に、そのブラウザ自身を表していない場合があります。
なぜユーザエージェントの情報が、そのままブラウザ自身を直接表していないのか。実はその理由は簡単で、一言で言うと、ユーザエージェントが「そのブラウザ自身が何なのかではなく、そのブラウザがどのように見られたいか」ということによって付けられているからなのです。このようになった理由は、ブラウザが発展してきた経緯と深くかかわっています。
Mozilla系のユーザエージェント
それでは何より始めに、広く一般に普及した初めてのブラウザであるNetscape Navigatorのユーザエージェントから見ていきましょう。これから紹介するユーザエージェントはすべてuserAgentプロパティの値となります。
JavaScriptが初めてサポートされたバージョン2.Xから、バージョン4.XまでのNetscape Navigatorのユーザエージェントは、次の通りです。
Mozilla/2.0 (Macintosh; I; PPC)
Mozilla/3.01 [ja]-C-MACOS8J (Macintosh; I; PPC)
Mozilla/4.04 [ja] (Macintosh; I; PPC, Nav)
Mozilla/4.06 (Macintosh; I; PPC, Nav)
ユーザエージェント情報のうち、「Mozilla」は、今でこそオープンソースで開発が進められているブラウザのことですが、もともとはNetscape Navigatorの開発コードでした。そして、その次に「3.01」「4.04」といったように、ブラウザのバージョン番号が続いています。さらにその後に続く括弧内は、ブラウザが実行されている環境などの詳細情報です。このように、Netscape Navigator 4.Xまでは、ブラウザの実際のバージョンとユーザエージェント内のバージョン番号が一致しています。つまりNetscape Navigatorの場合、バージョン4まではユーザエージェントと実際のブラウザとの差違はないのです。しかし、それ以降のバージョンのNetscape Navigatorでは少し事情が変わってきます。
バージョン4.X以降、Netscape NavigatorはInternet Explorerとのブラウザシェア獲得競争に敗れると共に、Netscape Navigatorを開発していたNetscape社がAOL社に吸収されるなどのごたごたで、しばらく開発が中断されてしまいました。
その後、Netscape Navigatorのソースコードは公開され、Mozilla.orgに開発が引き継がれます。そして開発の結果は、Netscape Navigatorの開発コード名を引き継いだMozillaブラウザとして公開されました。このMozillaは、名前の通りどちらかと言えば開発者向けの性格が強いブラウザです。
Mozillaのユーザエージェントは、次の通りです。
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.1) Gecko/20020826
このように、以前の開発コード名が実際のブラウザ名となったMozillaは、Netscape Navigator 4.Xから引き続きの開発となったので、バージョン番号が「5.0」となっています。そして細かな来歴は、バージョン名に続く括弧内で「rv:1.1」というように、バージョン番号ではなく、もっと小さな単位のリビジョン番号として付けられています。
ちなみにブラウザの開発が中断しているうちに、Netscape Navigator 4.06以降以降では1.3であったJavaScriptのバージョンも、Mozillaでは1つ飛んでJavaScript 1.5となっています。
Mozillaがバージョン番号として「5.0」を名乗るのは、開発コードの番号としては「4.X」の続きなので、特に違和感がないでしょう。しかし、AOL社がこのMozillaを基に独自の機能を追加して、再びNetscape Navigatorの名前を関したブラウザを発表すると、様子が変わってきます。
このMozillaを元にしたNetscape Navigatorである、Netscape Navigator 6.Xと7.Xのユーザエージェントは、次の通りです。
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.4)Gecko/ 20011022 Netscape6/6.2
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-JP; rv:1.0.2)Gecko/20030208 Netscape/7.02
このように、MozillaをベースにしたNetscape Navigatorでは、ユーザエージェントの前半はMozillaと同じ「Mozilla/5.0」となり、最後に「Netscape6/6.2」や「Netscape/7.02」といった、ブラウザの本当の種類とバージョンを表す文字列が追加された形になります。これは、同じくMozillaを元にしたブラウザFirefoxでも同じような命名方法がとられています。Firefoxのユーザエージェントは、次の通りです。
Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JPM; rv:1.7.5)Gecko/20041108 Firefox/1.0
これらのブラウザで、ブラウザの種類やバージョンを調べる場合は、ユーザエージェントの最後にある、ブラウザの本当の種類とバージョンを表す文字列を使う必要があります。
これはバージョン番号を値に持つappVersionプロパティでも同じです。appVersionプロパティは、ユーザエージェントのうちのバージョンにかかわる部分を値に持っています。このため、例えばNetscape Navigator 7.02だと「5.0 (Macintosh; U; PPC Mac OS X; ja-JP; rv:1.0.2) Gecko/ 20030208 Netscape/7.02」のようになります。

Gecko/ 20011022 Netscape6/6.2