IE6, IE7の判定方法とは?

このQ&Aのポイント
  • IE6, IE7の判定方法について詳しく教えてください。
  • 質問者はプログラマーではないため、判定方法について不安があります。
  • また、業界用語の「!!」についても教えてください。
回答を見る
  • ベストアンサー

IE6だけの判定、IE7だけの判定について

こんにちは。 下記の「IE6だけの判定方法(JavaScript)」で、どれが一番いいのか、 或は、もっと正確で簡素な良い方法があるのかどうかを教えてください。 また、IE7だけの判定方法も記載しますので、ご指導お願いします。 色々試した結果は、一応全部OKでした。 ただ、プログラマーでないので心配なので質問させて頂きました。 もうひとつ、!!は何かundefinedやfunctionを、true、falseへと整形してるようですが、 これを、業界用語で何って言うのかも、教えてください。よろしくお願いします。 <script> /* IE6だけの判定方法 */ // (1) var ua = navigator.userAgent.toLowerCase(); var bver = (ua.match(/.+(?:rv|webkit|khtml|opera|msie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]; var isIE6a = (/msie/.test(ua) && !/opera/.test(ua) && parseInt(bver) < 7 && (!window.XMLHttpRequest || typeof(XMLHttpRequest) === 'function')); if (isIE6a) document.write('IE6'); // (2) var isIE6b = document.uniqueID && document.compatMode && !window.XMLHttpRequest && document.execCommand; if (!!isIE6b) document.write('IE6'); // (3) var isIE6c = /msie|MSIE 6/.test(navigator.userAgent); if (isIE6c) document.write('IE6'); /* IE7だけの判定方法 */ var isIE7 = window.XMLHttpRequest && (/*@cc_on!@*/false) && !(document.documentMode >=8); if (!!isIE7) document.write('IE7'); </script>

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.4

確実にIEのバージョンを判定したい場合は「条件付きコメント」を利用する方法があります。 http://msdn.microsoft.com/ja-jp/library/cc817577.aspx 通常はHTMLタグとして書きますが、JavaScriptコード上で利用するためのハックもありますね。(あまり、いい方法ではない気がしますが) https://gist.github.com/527683 > もっと正確で簡素な良い方法があるのかどうかを教えてください。 何のためにIEのバージョンを判定したいのか、を考える必要があると思います。 - 「条件付きコンパイル」は JScriptエンジンのバージョンを識別します。 - 「条件付きコメント」は IE のバージョンを識別します。 - 「機能テスト」は プロパティorメソッド の有無を識別します。 例えば、「IE6 なら hogehoge のメソッドがないはずだから~」というような考えを持っているなら、それが IE のバージョンに依存するのか、JScript エンジンのバージョンに依存するのか、を今一度調査する必要があります。 もし、「Windows XP SP3 の IE6 で hogehoge が使用できるが、Windows XP SP2 の IE6 では使用できない」のなら、JScriptエンジンに依存していますので「条件付きコンパイル」で振り分ける方法があるでしょう。 「機能テスト」はそれらを調査する手間を省いてくれるので、コーディングの効率の面では都合がいいと思います。 > !!は何かundefinedやfunctionを、true、falseへと整形してるようですが、 型変換(キャスト) と呼びます。 ! は ToBoolean 演算子で Boolean 型に変換した評価値を反転させて返しています。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/11_Expressions.html#section-11.4.9 !! は反転に反転を重ねるのでBoolean型への型変換と同様の効果を得ることが出来ます。 ショートコーディングのためによくみられる手法ですが、正攻法としては Boolean() になると思います。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-6_Boolean_Objects.html#section-15.6.1 (余談) 他にも +arg でNumber型への変換、arg += ''; でString型への型変換するコードが見られます。 前者は Number() と同様の効果を得られますが、後者は String() と別の結果を得るので注意が必要です。 https://ideone.com/LiFWK

waterclock
質問者

お礼

That did it! これです。どうも丁寧に説明頂きありがとうございました。 それにしても、Internet Explorerは、困ったブラウザです。 みなさん、色々とありがとうございました。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

No.1です。 JScript version値については、 http://msdn.microsoft.com/en-us/library/2z6exc9e.aspx で見たんですけど、確かに「Windows XP SP3」でIE6を使ってるケースは javascriptエンジンのバージョンに5.7を返されるみたいですね。(残念)

waterclock
質問者

お礼

こんなサイトがあるとは知りませんでした。 情報、どうもありがとうございます。 IE9RCでは、JScript version: 5.9.と思いきや、JScript version: 9.ですね。 (2), (3)が使えそうかな。取りあえず今のこちらの問題では(2)を使ってみます。 不具合があれば、またその時でも考えましょう。

  • k0021
  • ベストアンサー率26% (32/120)
回答No.2

老化予防にHPを勉強していますが。質問内容と異なるかも IE7と、IE8の場合表示内容が異なる場合は、 CSSハックを使わずIEのバグに対処する方法 http://allabout.co.jp/gm/gc/23921/ を使用していますが。 通常は、ブラウザとIEの場合は、一部IE7とIE8によりスタイルシートを変更していますのでIEのバージョンのみ変更していませんのでJavaScriptの処理に付いては解答できません。

参考URL:
http://allabout.co.jp/gm/gc/23921/
waterclock
質問者

お礼

情報提供、どうもありがとうございます。 でも残念ですが「条件付きコメント」は、 外部スクリプトファイル(JS, CSS)では、利用できません。 また、Gzip+JSファイルの連結でパフォーマンス向上を見込んだ場合、 スクリプト内での処理が必要になるため、これは使えません。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

条件付コンパイル(/*@cc_on)使っているんだから、 @_jscript_versionで条件分けする方が、userAgentの値で判定するより確実で簡単 だと思います。  @_jscript_version 5.8 --- IE8  @_jscript_version 5.7 --- IE7  @_jscript_version 5.6 --- IE6 /*@cc_on   @if (@_jscript_version >= 5.7)    //IE7の処理   @elif (@_jscript_version >= 5.6)    //IE6の処理   @else @*/    //IE以外の処理(IE5以下は無視)   /*@end @*/

waterclock
質問者

お礼

どうもありがとうございます。 でも、こちらの環境では、上手く判定できませんでした。 補足に記載します。

waterclock
質問者

補足

/*@cc_on document.write("JScript version: " + @_jscript_version + "."); @*/ 上記のコードで、こちらのWindows XP SP3 IE6上では、 JScript version: 5.7. と表示され、IE7になってしまいます。 各自Windows OSによって、JScriptが違うのでしょうか?

関連するQ&A

  • IEのバージョンが7以下の際。ポップアップ表示

    こんにちわ。 今回やりたいことは、JavaScriptを使って、ブラウザのバージョンを判別し、メッセージウィンドをポップアップさせたいと思っています。 いかんせん、やっと最近HTMLとCSSの使い方がわかってきた程度で、JavaScriptは初心者です。(プログラム自身はVBAなどでそこそこ作っているので、なんとなくやり方はわかるんですが、実装が全く分かりません) 以下のようなサイトを見つけました。 http://jisakupc-technical.info/programing/javasc … 【以下ページ内のプログラム】 // ブラウザのUAを小文字で取得 var userAgent = window.navigator.userAgent.toLowerCase(); // IEの判定 var isIE = (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0); // IEのバージョンを取得 if (isIE) { // 正規表現によりUA文字列を配列に分割 var arr = /(msie|rv:?)\s?([\d\.]+)/.exec(userAgent); version = (arr) ? arr[2] : ''; return 'ie'+version; } else { // IE以外のブラウザ判定 if (userAgent.indexOf('chrome') != -1) { /* Google Chrome. */ return 'chrome'; } else if (userAgent.indexOf('firefox') != -1) { /* FireFox. */ return 'firefox'; } else if (userAgent.indexOf('safari') != -1) { /* Safari. */ return 'safari'; } else if (userAgent.indexOf('opera') != -1) { /* Opera. */ return 'opera'; } else if (userAgent.indexOf('edge') != -1) { /* Edge. */ return 'edge'; } else if (userAgent.indexOf('gecko') != -1) { /* Gecko. */ return 'gecko'; } else { return false; } } 分からないのが、Returnで返り値を返していますが、「どこ」に返しているのでしょうか? HTML構文内? この辺の、JavaScriptとHTMLの関連性がよく理解できていません。 最終的にやりたいのは、ブラウザがIEでかつ7以下もしくはIE8以上だが互換表示モードだとポップアップをさせたいということです。 何か良いアドバイスを頂けると大変助かります。

  • javascriptで別ページに・・・ 続編

    こんにちは。 前回質問させて頂いた事で、特定のユーザーエージェントからのアクセスを任意の別ページに飛ばす方法に成功しました。 下記がそのソースです。 このソースの例では、Internet ExplorerからのアクセスをヤフージャパンTOPページに飛ばす方法です。 ------------------- <script type="text/javascript"> <!-- document.write('<p>ブラウザの判別:'); if(navigator.userAgent.indexOf("Opera") != -1){ // 文字列に「Opera」が含まれている場合 document.write('あなたのブラウザは Opera ですね?'); } else if(navigator.userAgent.indexOf("MSIE") != -1){ // 文字列に「MSIE」が含まれている場合 location.href="http://www.yahoo.co.jp/"; } else if(navigator.userAgent.indexOf("Firefox") != -1){ // 文字列に「Firefox」が含まれている場合 document.write('あなたのブラウザは Firefox ですね?'); } else if(navigator.userAgent.indexOf("Netscape") != -1){ // 文字列に「Netscape」が含まれている場合 document.write('あなたのブラウザは Netscape ですね?'); } else if(navigator.userAgent.indexOf("Safari") != -1){ // 文字列に「Safari」が含まれている場合 document.write('あなたのブラウザは Safari ですね?'); } else{ document.write('判別できませんでした。'); } document.write('</p>'); // --> </script> ----------------------------------- これに対して追加質問させて頂きます。 (1)ユーザーエージェントの指定が上記のままではInternet Explorer利用者の全員が対象になってしまうので、さらにUAを絞り込んで、 例 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.1; SV1) ↑この様に、より長く具体的に絞り込んでUAを指定する事は不可能でしょうな。 自己のアクセス解析で得られた情報を記述してテストしましたが、成功しませんでした。 半角や全角の違いか?それともスペースに問題があるのか分かりません。 (2)上記の例では、ユーザーエジェントで判定しておりますが、ホストで判定する事は不可能でしょうか。 自己の場合の「softbank***********.bbtec.net」でテストしましたが、やはり成功しませんでした。 お手数ですが宜しくお願いします。

  • JavaScriptでブラウザの判別をしたいのですがIEだけelseの処理がなぜか追加されてしまう。

    ブラウザとバージョンを表示するスクリプトを書きたいのですがIEのときだけ 「Internet Explorer: 6.0不明」のようにelseの部分を書き出してしまいます。 Firefoxのときは「Firefox: 1.5.0.4」となりelseの部分を書き出しません。 なぜこのような結果になるのでしょうか? ちなみにFirefoxの判別の部分を消去するとなぜかこの問題が起こりません。 改善策をご存知の方がおられましたらご回答をよろしくお願いします。 ua = navigator.userAgent; if( ua.indexOf( "MSIE" ) > -1 ) { str = ua.indexOf( "MSIE" ) + 5; ver = ua.substring( str, str + 3 ); document.write( "Internet Explorer: " + ver ); } //↓ここの間を消去すると問題は起こらない。 if( ua.indexOf( "Firefox" ) > -1 ) { str = ua.indexOf( "Firefox" ) + 8; ver = ua.substring( str, str + 7 ); document.write( "Firefox: " + ver ); } //↑ここの間を消去すると問題は起こらない。 else { document.write( "不明" ); }

  • IEにインストールされているか確認する方法

    <script language="JavaScript"> var javawsInstalled = 0; var javaws142Installed=0; var javaws150Installed=0; var javaws160Installed = 0; isIE = "false"; if (navigator.mimeTypes && navigator.mimeTypes.length) { x = navigator.mimeTypes['application/x-java-jnlp-file']; if (x) { javawsInstalled = 1; javaws142Installed=1; javaws150Installed=1; javaws160Installed = 1; } }else { isIE = "true"; } </script> <script language="VBScript"> on error resume next If isIE = "true" Then If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then javawsInstalled = 0 Else javawsInstalled = 1 End If If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then javaws142Installed = 0 Else javaws142Installed = 1 End If If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))) Then javaws150Installed = 0 Else javaws150Installed = 1 End If If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.6.0.0"))) Then javaws160Installed = 0 Else javaws160Installed = 1 End If End If </script> <script language="JavaScript"> /* Note that the logic below always launches the JNLP application *if the browser is Gecko based.This is because it is not possible *to detect MIME type application/x-java-jnlp-file on Gecko-based browsers. */ if (javawsInstalled || (navigator.userAgent.indexOf("Gecko") !=-1)) { document.write("<a href=http://test023.web.fc2.com/magalingclient.jnlp><ul><li></li></ul></a>"); } else { document.write("Java がインストールされていません。"); document.write("<a href=http://java.sun.com/PluginBrowserCheck?pass=http://test023.web.fc2.com/download.html&fail=http://java.sun.com/javase/downloads/ea.jsp>ここをクリック</a> "); document.write("すると、無料ダウンロードページへジャンプします。インストールが完了すると、アプリケーションが起動します。"); } </script> この記述で、IE8 では正常に表示されますが IE9では表示・アプリケーションの起動が正常にできません。 IE8 と IE9 では、記述(確認)方法が違うのか、そもそも IE9 に互換性が無いだけなのか理由をご存知の方ご教授願います。 

  • JavaScriptでIE6を検知し、転送する。

    IE6からアクセスされた場合、 ・アラートを表示してアップグレードを促す。 ・同時にアップグレード用のウェブページに転送する。 という処理をJavaScriptで行いたいと思いました。 ブラウザ判別は、↓こちらのサイトを参考にしました。 http://winofsql.jp/VA003334/infoboard.php?mid=sjscript&id=070828100942&pid=3 そして、以下のコードをhead内に記入しています。 ============================== <script type="text/javascript"> var userAgent = window.navigator.userAgent.toLowerCase(); var appVersion = window.navigator.appVersion.toLowerCase(); if (userAgent.indexOf("msie") > -1) { if (appVersion.indexOf("msie 6.0") > -1) { window.alert("InternetExproler Ver.6 をご利用の方は、新しいバージョンへアップグレードして下さい。"); window.location.href = "http://www.xxxxxxxxxx.com"; } } </script> ============================== IEtesterで試すと、一応Ver.6の際に、狙った動作はしています。 しかし、何故かIEtester上で「ScriptError」が表示されます。 JavaScriptは、だいぶ不安があるので、この「ScriptError」が気になって仕方ありません。 やはりどこか悪いところがあるのでしょうか。。 どなたかご意見を聞かせて下さい。 また、headの中に長々と書くのも好きではないので、上の内容を丸ごとコピーして、「ie6.js」というファイル名をつけ、jsディレクトリに入れ、下のようにしました。 <script type="text/javascript" src="js/ie6.js"></script> こうすると何故かアラートの文字が文字化けしてしまいます。 (head内に書いてる時はしない。) 何故なのでしょうか。 よろしくお願い致します。

  • SafariのIframeで高さが取得できません

    <script language="JavaScript"> <!-- function frame_check(){ if(main.document.body){ if(navigator.userAgent.indexOf("Opera") != -1){ // 文字列に「Opera」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("MSIE") != -1){ // 文字列に「MSIE」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("Firefox") != -1){ // 文字列に「Firefox」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Netscape") != -1){ // 文字列に「Netscape」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Safari") != -1){ // 文字列に「Safari」が含まれている場合 var f = main.documentElement.offsetHeight; } if(f) document.getElementById("frame_set").height=f+20; setTimeout("frame_check()",100); }else{ setTimeout("frame_check()",100); } } setTimeout("frame_check()",10); --></script> <iframe name="main" id="frame_set" src="mainf.html" width="800" height="4000" frameborder="0" scrolling="no"></iframe> 上記のスクリプトを作成しましたが、IE7、 Firefoxではうまくいきますが、SafariではIframeに表示するページの高さが取得できません。 どこが問題なのかご教授お願いいたします。

  • ブラウザで表示を変更

    <SCRIPT TYPE="text/javascript"> <!-- if (navigator.userAgent.indexOf("MSIE")!="-1"){//for IE document.write("インターネットエクスプローラー"); } else { document.write("別ブラウザ"); } //--> </SCRIPT> 上記JavaScriptと同じように、インターネットエクスプローラーとそれ以外のブラウザで表示させるメッセージを変えたいのですが、どのように書けばいいのでしょうか。

    • ベストアンサー
    • Perl
  • MAC ブラウザ情報を取得するには

    はじめまして、 ゆありです。 質問させて下さい。 ASPを用いて、クライアントがMACでNetscapeだった場合、ブラウザのバージョンを取得したいんです。 ユーザエージェントを取得してみたのですが、 (1)OS :navigator.userAgent      Win/Mac を判定 (2)ブラウザ :navigator.appName       Explorer/ Netscape を判定 (3)ブラウザバージョン :IE は navigator.userAgent.substring(navigator.userAgent.indexOf("Netscape",0)+9,myAgent.indexOf("Netscape",0)+10); Netscape はnavigator.userAgent.substring(navigator.userAgent.indexOf("MSIE",0)+5,myAgent.indexOf("MSIE",0)+6); 上記の情報で、Windows(IE/Netscape)と MAC(IE)がクライアントの場合、 (3)の結果に正常値(IE6.0なら6、Netscape7.1なら7)が帰ってくるのですが、MAC(Netscape)だとうまくいきません。 MACで、Netscapeのバージョンの取得方法を知っている方、 または、Netscapeの7 と判定する為に取得できそうな情報をしっている方が いらっしゃいましたら教えて下さい。

  • ブラウザ判定による画像表示とjavaスクリプト外部呼出し

    はじめまして。ブラウザ判定でIEの場合フラッシュ、それ以外のブラウザは静止画像を表示するという処理を行いたいと思います。 それに加えてフラッシュを.jsファイルで外部呼出しを行いたいのですが上手くいきません。(コントロールをアクティブ~のメッセージを出さない為) すみませんが、アドバイスの方をよろしくお願いいたします。 以下ソースです。(文字制限があるので一部省略してます) <SCRIPT language="JavaScript"> <!-- //(IEブラウザ) if (navigator.userAgent.match(/MSIE (\d\.\d+); Windows/)) { document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia~#version=6,0,0,0" width="481" height="150">'); document.write('<param name="WMODE" value="Transparent" />'); document.write('<PARAM name="MOVIE" value="top/top.swf">'); document.write('<EMBED src="top/top.swf" width="481" height="150" type="application/x-shockwave-flash">'); document.write('</embed>'); document.write('</object>');} //(NNブラウザ) else{ document.write("<IMG SRC='top/nntop.gif' WIDTH='481' HEIGHT='150' BORDER='0'>");} //--> </SCRIPT> 以上のものをまとめたいのですが、IE以外のブラウザ判定の時におかしくなってしまいます。else以降の文章がhtmlとして表示されてしまいます。↓(NNで確認) <SCRIPT language="JavaScript"> <!-- if (navigator.userAgent.match(/MSIE (\d\.\d+); Windows/)) { document.write('<script src="top/top.js"></script>'); } else{document.write("<IMG SRC='top/nntop.gif' WIDTH='481' HEIGHT='150' BORDER='0'>");} //--> </SCRIPT> お手数ですがご助力願います。

  • Safariを判別し別ページに飛ばすには

    javascriptでブラウザを判別して、ブラウザによって違うページに飛ばしています。 基本的にはIEとそれ以外なのですが、Safariだけが別ページに飛んでくれません。(index.htmlにいたままになる) 下記のようにしていますが、どうすれば飛ぶようになるでしょうか? よろしくお願いします。 <script type="text/javascript"> if(navigator.userAgent.indexOf("MSIE") != -1){ window.location.href = "index.html";}     : else if(navigator.userAgent.indexOf("safari") != -1){ window.location.href = "index2.html";} </script>

専門家に質問してみよう