SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

クロスブラウザスクリプトの作成テクニック

ユーザエージェントからブラウザの種類やバージョンを判断する

クロスブラウザスクリプトの作成テクニック 第3回


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にまとめます。

表2 navigatorオブジェクト
プロパティ
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に応じた処理を行う』で解説しているので、併せて参照して下さい。

 それぞれのプロパティがどのような値を返すか、次のサンプルをいろいろなブラウザで実行し確認してみてください。

Sample_1.html
<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のユーザエージェントは、次の通りです。

Netscape Navigator 2.X
Mozilla/2.0 (Macintosh; I; PPC)
Netscape Navigator 3.X
Mozilla/3.01 [ja]-C-MACOS8J (Macintosh; I; PPC)
Netscape Navigator 4.X
Mozilla/4.04 [ja] (Macintosh; I; PPC, Nav)
Netscape Navigator 4.06
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のユーザエージェント
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のユーザエージェントは、次の通りです。

Netscape Navigator 6.X
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.4)
 Gecko/ 20011022 Netscape6/6.2
Netscape Navigator 7.X
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のユーザエージェントは、次の通りです。

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」のようになります。

次のページ
ユーザエージェントの情報を確認する(後半)

この記事は参考になりましたか?

クロスブラウザスクリプトの作成テクニック連載記事一覧

もっと読む

この記事の著者

半場 方人(ハンバ マサヒト)

Netscape2.XでJavaScriptに初めて出合ったころ、「なぜJavaScriptの日本語の書籍が無いんだ」、とあちこちで嘆いていたら、じゃあおまえが書け、とお声がかかり、JavaScript関連の書籍を執筆するようになる。執筆に際していつも考えるのは、「JavaScript初心者だった頃の気持ちを忘れないよに」、ということ。主な著書は、「標準Webデザイン講座 JavaScript&Ajax」(翔泳社)などがある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/342 2008/08/26 13:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー