中級編 Chapter 02 「ブラウザ別に違うページを表示する」
|
|||||||||||||||||||||||||||
■userAgentの文字列を調べよう 4章でnavigatorオブジェクトのプロパティを読み出して情報を表示させました。この情報を利用してブラウザ別に違うページを表示させてみます。 何のブラウザを使っているかはnavigator.userAgentの文字列に含まれているブラウザ名を調べます。一見するとアプリケーション名を示すnavigator.appNameでも良さそうですが、OperaやSafariなどはNetscapeなど違うブラウザの名前を返してしまいます。これは昔Netscape社のブラウザが大半を占めていた場合の名残で、多くのブラウザがNetscapeの名前を返すようになっているためです。 userAgentの内容は表のようになっています。この中からブラウザを判別するのに必要な文字を探し出します。文字を探し出す方法は、いくつかありますが、ここではindexOf()メソッドを使います。このメソッドは以下の書式になっています。 検索対象文字列.indexOf("検索文字列",開始番号); 文字列が見つかると見つかった先頭の位置を返します。位置は下図のように文字と文字の間を示します。文字の位置を示すわけではないので注意してください。文字列が見つからない場合には-1を返します。 ブラウザを判別する文字を決めて、indexOf()の返り値が0以上、見つからなければ-1になるのを調べれば良いことになります。それぞれのブラウザを判別する文字列は以下のようになります。 調べたいブラウザ 調べる文字列 Internet Explorer MSIE Netscape Netscape Safari Safari Opera Opera Internet Explorerかどうかを判別するには以下のようになります。 if (uaName.indexOf("MSIE",0) > -1) return "ie"; 返す値はieの文字(ブラウザ名)にしてあります。同様にSafari、Operaなどを調べます。注意しないといけないのはOperaなどの場合にはInternet Explorerを示すMSIEの文字が入っているため、Internet Explorerよりも先に調べて関数から抜ける必要があります。 ブラウザごとに違うページにジャンプさせるために「関数getBrowser()からの戻り値+".html"」の文字列をlocation.hrefに入れます。location.hrefに表示するページURLを入れるとページが切り替わります。実際のプログラムはリスト1になります。 表
●リスト1 <html> <head> <title>ブラウザ別に違うページを表示</title> <script language="JavaScript"><!-- // ------------------------------ // Safari -> safari // Opera -> opera // Internet Explorer -> ie // Netscape -> ns // ------------------------------ function getBrowser() { uaName = navigator.userAgent; if (uaName.indexOf("Safari",0) > -1) return "safari"; if (uaName.indexOf("Opera",0) > -1) return "opera"; if (uaName.indexOf("MSIE",0) > -1) return "ie"; if (uaName.indexOf("Netscape",0) > -1) return "ns"; } location.href = getBrowser() + ".html"; // --></script> </head> <body> </body> </html> |