SHOEISHA iD

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

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

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

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

ブラウザに合わせたスクリプトを実行する

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


ブラウザの種類をフォームに書き出す

 ウェブサイト上でフォームを使ってアンケートを取るとき、その中にユーザーが利用しているブラウザの種類を確認する質問を入れることがあります。このような場合、プルダウンメニューなどを使って、ユーザーにブラウザの種類を選択してもらう、というのが一般的によく見受けられる方法です。

 しかし、今回解説していく、ブラウザの種類やバージョンを判断するスクリプトを利用すれば、自動的にユーザーが使用しているブラウザを判断し、そのブラウザに合わせた値をフォーム内に設定できます。これにより、多少なりともユーザーの手間を軽減させることができます。

 それでは、ブラウザの種類を判断しブラウザ名をフォームに書き出すスクリプトを見ていきましょう(Sample_1.html)。

Sample_1.html:ブラウザの種類をフォームに書き出す
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Sample_1</title>
<style type="text/css">
<!--
body { background-color: #ffffff; }
-->
</style> </head> <body> *ブラウザの種類をフォームに書き出す <p> <form name="Browser"> ブラウザ: <input type="text" name="namae" SIZE=30> </form> </p> <script type="text/javascript"> <!--
var B_Name=document.Browser.namae;
var UA=navigator.userAgent;
if(UA.indexOf("MSIE") == -1){
if(UA.indexOf("Mozilla/2") != -1) {B_Name.value="Netscape Navigator2.X"} if(UA.indexOf("Mozilla/3") != -1) {B_Name.value="Netscape Navigator3.X"} if(UA.indexOf("Mozilla/4") != -1) {B_Name.value="Netscape Navigator4.X"} } if(UA.indexOf("Mozilla/5") != -1){ if(UA.indexOf("Safari") != -1){B_Name.value="Safari"} else{ if(UA.indexOf("Netscape6/") != -1) {B_Name.value="Netscape Navigator6.X"} else{ if(UA.indexOf("Netscape/7") != -1) {B_Name.value="Netscape Navigator7.X"} else{ if(UA.indexOf("Netscape/8") != -1) {B_Name.value="Netscape Navigator8.X"} else{ if(UA.indexOf("Firefox") != -1) {B_Name.value="Firefox"} else{B_Name.value="Mozilla"} } } } } } if(UA.indexOf("MSIE") != -1){ if(UA.indexOf("Mozilla/2") != -1) {B_Name.value="Internet Explorer3.X"} if(UA.indexOf("Mozilla/3") != -1) {B_Name.value="Internet Explorer3.X"} if(UA.indexOf("Mozilla/4") != -1){ if(UA.indexOf("Opera") != -1){B_Name.value="Opera"} else{ if(UA.indexOf("MSIE 6") != -1){ if(UA.indexOf("SV1") != -1) {B_Name.value="Internet Explorer6.X SP2"} else{B_Name.value="Internet Explorer6.X"} } else{ if(UA.indexOf("MSIE 5") != -1) {B_Name.value="Internet Explorer5.X"} else{B_Name.value="Internet Explorer4.X"} } } } } //-->
</script> </body></html>

 サンプルでは、21行目~64行目の<script type="text/javascript">~</script>の中にスクリプトを設定しています。このようなスクリプトの場合、本来ならonLoadなどのイベントハンドラを使用して、関数を読み出すようにしたいところです。しかし、Macintosh版のInternet Explorer 3など、一部の古いブラウザでスクリプトが動かない場合があるため、今回は関数を使わず、body要素の一番最後にスクリプトを設定するようにしています。それでは、ブラウザを判断する処理を見ていきましょう。

 スクリプトの処理では、if文を使ってユーザエージェント内の情報を調べることによって、ブラウザを判断しています。そしてブラウザを判断した後、if文の処理で、各のブラウザに合わせた値を、18行目「<input type="text" name="namae" SIZE=30>」に設定したフォームへ書き出しています。また、サンプルでは、24行目「var UA=navigator.userAgent;」でユーザエージェントの値を変数UAに代入し、以降は、変数UAからブラウザを表す文字列を検索しています。

 ブラウザの判断では、ユーザエージェントの値に「Mozilla/2」「Mozilla/3」「Mozilla/4」を持つブラウザにうち、Netscape Navigator系のブラウザかInternet Explorer系のブラウザであるを、25行目「if(UA.indexOf("MSIE") == -1){」と46行目「if(UA.indexOf("MSIE") != -1){」で判断しています。

 そして、Netscape Navigator系ブラウザのさらに詳細な判断は25行目~29行目、Internet Explorer系のブラウザは46行目~62行目で行っています。

Sample_1.html:25~29行目(抜粋)
if(UA.indexOf("MSIE") == -1){
    if(UA.indexOf("Mozilla/2") != -1)
        {B_Name.value="Netscape Navigator2.X"}
    if(UA.indexOf("Mozilla/3") != -1)
        {B_Name.value="Netscape Navigator3.X"}
    if(UA.indexOf("Mozilla/4") != -1)
        {B_Name.value="Netscape Navigator4.X"}
}
Sample_1.html:46行目~62行目(抜粋)
if(UA.indexOf("MSIE") != -1){
    if(UA.indexOf("Mozilla/2") != -1)
        {B_Name.value="Internet Explorer3.X"}
    if(UA.indexOf("Mozilla/3") != -1)
        {B_Name.value="Internet Explorer3.X"}
    if(UA.indexOf("Mozilla/4") != -1){
        if(UA.indexOf("Opera") != -1){B_Name.value="Opera"}
        else{
            if(UA.indexOf("MSIE 6") != -1){
                if(UA.indexOf("SV1") != -1)
                    {B_Name.value="Internet Explorer6.X SP2"}
                else{B_Name.value="Internet Explorer6.X"}
            }
            else{
                if(UA.indexOf("MSIE 5") != -1)
                    {B_Name.value="Internet Explorer5.X"}
                else{B_Name.value="Internet Explorer4.X"}
            }
        }
    }
}

 26行目~28行目のNetscape Navigator系のブラウザの処理では、ユーザエージェントの中に「Mozilla/2」という文字列があればNetscape Navigator 2.X(26行目)、ユーザエージェントの中に「Mozilla/3」という文字列があればNetscape Navigator 3.X(27行目)、ユーザエージェントの中に「Mozilla/4」という文字列があればNetscape Navigator 4.X(28行目)であると判断しています。

 47行目~61行目のInternet Explorerの詳細な判断処理では、まず47行目で、ユーザエージェントのバージョンを表す値として「Mozilla/2」を返すInternet Explorerを、バージョン3として取り扱う処理を設定しています。次の48行目が、通常のInternet Explorer 3.Xのための処理となります。

 さらに、Internet Explorer系のブラウザの中で、ユーザエージェントに「Mozilla/4」の値を持つバージョン4以降のInternet Explorerや、Operaであるかの判断は、49行目~61行目で処理しています。

 ユーザエージェントの中に「Opera」という文字列があればOpera(50行目)、それ以外で「MSIE 6」という文字列があればInternet Explorer 6.X(52行目~55行目)、さらにそれ以外で「MSIE 5」という文字列があればInternet Explorer 5.X(57行目)、以上のどれにも当てはまらない場合は、Internet Explorer 4.Xと判断するようにしています(58行目)。また、Internet Explorer 6.XのSP2版であるかどうかは、52行目~55行目の処理内で、ユーザエージェント内に文字列「SV1」が含まれているかどうかで判断しています。

 以上が、ユーザエージェントの値に「Mozilla/2」「Mozilla/3」「Mozilla/4」を持つブラウザに関する処理です。

 そしてこれ以外のブラウザで、ユーザエージェントに「Mozilla/5」の値を持つ、バージョン6以降のNetscape Navigator、Mozilla、Firefox、Safariの判断は30行目~45行目で処理しています。

Sample_1.html 30行目~45行目(抜粋)
if(UA.indexOf("Mozilla/5") != -1){
    if(UA.indexOf("Safari") != -1){B_Name.value="Safari"}
    else{
        if(UA.indexOf("Netscape6/") != -1)
            {B_Name.value="Netscape Navigator6.X"}
        else{
            if(UA.indexOf("Netscape/7") != -1)
                {B_Name.value="Netscape Navigator7.X"}
            else{
                if(UA.indexOf("Netscape/8") != -1)
                    {B_Name.value="Netscape Navigator8.X"}
                else{
                    if(UA.indexOf("Firefox") != -1)
                        {B_Name.value="Firefox"}
                    else{B_Name.value="Mozilla"}
                }
            }
        }
    }
}

 ここでは、ユーザエージェントの中に「Safari」という文字列があればSafari(31行目)、それ以外で「Netscape6/」という文字列があればNetscape Navigator 6.X(33行目)、さらにそれ以外で「Netscape7/」という文字列があればNetscape Navigator 7.X(35行目)であると順番に判断していき、最後にどれにも当てはまらなかった場合は、Mozillaであると判断するようにしています(40行目)。

 さて、このサンプルは、あくまでもブラウザを判断するスクリプトの基本形です。実際には、ここまで細かくブラウザの種類やバージョンを判断する必要はあまりありません。多くの場合、このスクリプトを応用して、状況に合わせていらない部分を省いたり、例えばOSの種類も判断に入れるなどして、必要な部分を付け足していくことになります。

 それでは、次にこのスクリプトを応用したサンプルを見ていきましょう。

次のページ
ブラウザに合わせてページを振り分ける

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/427 2010/01/05 11:02

イベント

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

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

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

メールバックナンバー