5

ブラウザーモードの設定にもかかわらず、ブラウザーがIE10の場合は、単純なjavascript(フレームワークなし)で検出する必要があります。ブラウザモードがIE9の場合、JSからIE10を検出するにはどうすればよいですか?

いくつかのコメント: - 私はブラウザを検出する必要がありますが、目的がブラウザのバグを緩和するため、機能を検出するオプションではありません。 - ブラウザモードをIE9に切り替えると、(UA文字列や機能の検出のような)一般的な方法を試してみましたが、IE10の中にあることを示唆するすべての要素が消えてしまいます。

+0

軽減しようとしている「ブラウザのバグ」とは何ですか? – Ian

+0

ブラウザのモードを変更すると内部変数が変更されるかどうか分かりませんが、条件付きコンパイルを使用して '@ _jscript_version'が" 10 "(メジャーバージョン)で始まるかどうかを確認できます。 – Ian

+0

特定のシナリオでは、フラッシュ部分がコンテナ領域全体をカバーしないため、1ピクセル幅が狭くなります。あなたはあなたの解決策を精緻化できますか?それはjs解決策であることはありません。 – gztomas

答えて

12

あなたはあなたが作業しているブラウザを検出したい場合は、IEは特別な機能を持っているが、条件付きコンパイルと呼ばれる - http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

バージョンを取得するには、@_jscript_versionを使用すると思います。だから、JavaScriptで、私が使用したい:

<script type="text/javascript"> 
    var isIE10 = false; 
    /*@cc_on 
     if (/^10/.test(@_jscript_version)) { 
      isIE10 = true; 
     } 
    @*/ 
    console.log(isIE10); 
</script> 

を私はIE10を持っていませんが、IE9でテストする場合、動作しているようです。ブラウザのモードを7または8に変更すると、@_jscript_versionには真のブラウザのJScriptバージョン(私の場合は9のままです)があります。

JScriptのバージョンの一覧は、http://en.wikipedia.org/wiki/JScript#Versionsで確認できます。 IE10は表示されませんが、10と仮定します。IE9以前は、ブラウザのバージョンと矛盾する数字を使用していましたが、9以降は適切な軌道に入っている可能性があります。@_jscript_versionがデフォルトで10しかし、私はそれが "10"で始まり、おそらくマイナーバージョンを持っていると思います。


UPDATE:

コメントの縮小を避けるために、あなたのようなものを使用することができます

var IE = (function() { 
    "use strict"; 

    var ret, isTheBrowser, 
     actualVersion, 
     jscriptMap, jscriptVersion; 

    isTheBrowser = false; 
    jscriptMap = { 
     "5.5": "5.5", 
     "5.6": "6", 
     "5.7": "7", 
     "5.8": "8", 
     "9": "9", 
     "10": "10" 
    }; 
    jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")(); 

    if (jscriptVersion !== undefined) { 
     isTheBrowser = true; 
     actualVersion = jscriptMap[jscriptVersion]; 
    } 

    ret = { 
     isTheBrowser: isTheBrowser, 
     actualVersion: actualVersion 
    }; 

    return ret; 
}()); 

をとの内部値から翻訳されIE.isTheBrowserIE.actualVersion(のようなプロパティにアクセスJScriptバージョン)。