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
}
}
このコードはうまくいくでしょうか?
おそらく私に寄せられるであろうコメントをいくつか紹介します。
- はい、ユーザーが
useragent
文字列を偽造できることは知っています。心配していません。 - はい、プログラミングのプロはブラウザの種類ではなく機能のサポートを嗅ぎ分けることを好むのは知っていますが、この場合はこのアプローチが意味をなさないと思います。必要な機能はすべての (関連する) IE 以外のブラウザでサポートされていること、すべての
pre-v9 IE
ブラウザでサポートされているわけではないことは既にわかっています。サイト全体で機能を 1 つ 1 つチェックするのは無駄でしょう。 - はい、(または >= 20) を使用してサイトにアクセスしようとすると、
IE v1
「badBrowser」が true に設定されず、警告ページが適切に表示されないことはわかっています。これは私たちが受け入れるリスクです。 - はい、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に感謝します。