1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptでIEのバージョン(v9以前)を検出する。

2022-04-01 12:01:12

質問

のバージョンを使用しているユーザーをエラーページにバウンスさせたい。 Internet Explorer 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 のブラウザはそうではありません。サイト全体で機能ごとにチェックするのは、無駄が多いと思います。
  3. たしかに、「Skype」を使ってアクセスしようとする人がいることは知っています。 IE v1 (または >= 20) では、「badBrowser」が true に設定されず、警告ページが正しく表示されないと思います。それは、私たちが負うべきリスクです。
  4. はい、マイクロソフトには、ブラウザのバージョンを正確に検出するために使用できる "条件付きコメント" があることは知っています。IEは、以下の時点で条件付きコメントをサポートしなくなりました。 IE 10 そのため、この方法は全く役に立ちません。

その他に注意すべき点はありますか?

解決方法は?

これは私が好む方法です。最大限のコントロールが可能です。(注:条件文は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));

ありがとうございます ポール・アイリッシュ .