JavaScript で IE バージョン (v9 以前) を検出する 質問する

JavaScript で IE バージョン (v9 以前) を検出する 質問する

Internet Explorer私たちの Web サイトのユーザーがv9 より前のバージョンの を使用している場合、エラー ページに戻るようにしたいと考えています。 をサポートするには時間と費用をかける価値がありませんIE pre-v9。IE 以外のすべてのブラウザーのユーザーには問題がなく、エラー ページに戻るべきではありません。提案するコードは次のとおりです。

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

このコードはうまくいくでしょうか?

おそらく私に寄せられるであろうコメントをいくつか紹介します。

  1. はい、ユーザーがuseragent文字列を偽造できることは知っています。心配していません。
  2. はい、プログラミングのプロはブラウザの種類ではなく機能のサポートを嗅ぎ分けることを好むのは知っていますが、この場合はこのアプローチが意味をなさないと思います。必要な機能はすべての (関連する) IE 以外のブラウザでサポートされていること、すべてのpre-v9 IEブラウザでサポートされているわけではないことは既にわかっています。サイト全体で機能を 1 つ 1 つチェックするのは無駄でしょう。
  3. はい、(または >= 20) を使用してサイトにアクセスしようとすると、IE v1「badBrowser」が true に設定されず、警告ページが適切に表示されないことはわかっています。これは私たちが受け入れるリスクです。
  4. はい、Microsoft には、ブラウザのバージョンを正確に検出するために使用できる「条件付きコメント」があることは知っています。IE は から条件付きコメントをサポートしなくなったためIE 10、この方法はまったく役に立たなくなりました。

他に注意すべき明らかな問題はありますか?

ベストアンサー1

これは私が好む方法です。最大限の制御が可能です。(注: 条件文は IE5 - 9 でのみサポートされます。)

まずIEクラスを正しく設定します

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

次に、CSS を使用してスタイルの例外を作成するか、必要に応じて簡単な JavaScript を追加することができます。

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

Paul Irishに感謝します。

おすすめ記事