ログイン時にIE8(IE6、IE7ではなく)または別のブラウザーを使用するユーザーのみがサイトにアクセスできるようにしたい。
私はフォローしました: http://code.google.com/p/ie6-upgrade-warning/ しかし、ログイン時にIE7ユーザーがメインサイトを使用できないようにしたかった(彼らは表示できます)パブリックページ。)その理由は、メインのWebアプリケーションに多くのJavaScript効果があり、IE8レンダリングモード(またはIE以外のブラウザー)で100%しか機能しないためです。
Ie6へのアップグレード警告をie7に変更することの問題は、IE8がIE7レンダリングモードでWebページを表示し、ie7であることについて「嘘」をつけ、IE7スタイルシートコードをトリガーするように見えることです。
では、IE8モードでページを常にレンダリングするようにIE8を強制するにはどうすればよいですか?
このタグを使用:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
AdamSaneの例の修正:
<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->
ここにいくつかの解決策を示唆する良いリンクがあります
http://garmahis.com/tools/ie6-update-warning/
個人的に私は4番目の解決策が好きです( http://www.browser-update.org/ )
ただのケーキ
IE 8+モードを強制するのではなく、条件付きコメントと単純なJavaScriptチェックを組み合わせて使用します。document.documentMode
プロパティがIEに追加されたので、それが存在する場合(値に関係なく、このコードでは7である必要があります)、互換性モードにあり、警告を表示しないでください:
<!--[if lte IE 7]>
<script>
if (!document.documentMode) { //if documentMode exists, this is a later IE in compatibility mode
showBadBrowserMessage();
}
</script>
<![endif]-->
これは、すべての古いブラウザで機能するこのクールなスクリプトです。
<script type="text/javascript">
var $buoop = {vs:{i:7,f:5,o:12,s:5,n:9}};
$buoop.ol = window.onload;
window.onload=function(){
try {if ($buoop.ol) $buoop.ol();}catch (e) {}
var e = document.createElement("script");
e.setAttribute("type", "text/javascript");
e.setAttribute("src", "//browser-update.org/update.js");
document.body.appendChild(e);
}
</script>
注:訪問者がアドバイスを無視すると、しばらく表示されなくなります。
もっと見つけることができます: ここ
個人的には、セキュリティ上の理由から、ユーザーにIEをアップグレードすることをお勧めします。条件付きコメントを使用して、IE8未満のブラウザーをターゲットにします。
<!--[if lt IE 8]>You are using an outdated version of Internet Explorer. For security reasons you should upgrade your browser. Please go to Windows Updates and install the latest version.<![endif]-->
このメッセージは控えめですが、優雅でなければなりません。また、ブラウザをアップグレードできないユーザーもWebサイトを使用できるようにする必要があります。
(X)HTMLのコーディング方法によって異なりますが、次のような厳密なdoctypeがある場合、IE8は(IE7モードではなく)標準モードを使用する必要があります。
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
hTMLファイルの上部。
さまざまなdoctypesなどがIE8のレンダリングモードにどのように影響するかについての良い投稿を次に示します。 Internet Explorer 8の互換モードについて
おそらく最良の方法は、ユーザーのブラウザのUser-Agent文字列を検出し、古いバージョンのIEを使用している場合にアップグレード(またはFirefoxやChromeなどの別のブラウザをダウンロード)を要求するページにリダイレクトすることです。 IE 7 and 8 on this IE developer blog entry のユーザーエージェントの例を見ることができます。古いバージョンのIE follow同様のパターン。
ただし、すべきでないことの1つは、特定のパターンに従わないユーザーエージェント文字列は無効であると想定することです。 MSIE([0-9])をチェックして、範囲内かどうかを確認します。完全に見つからない場合は、ブラウザがサポートされていると想定してください。 MSIE 7の場合は、互換性モードを示すトライデントマーカーをさらに確認します(おそらく、ユーザーにオフにするように依頼します)。これにより、他の将来の新興ブラウザが、ドアに目を向けることなく、ページをレンダリングできるようになります。
すでに述べたように、これを実現する最良の方法は、条件付きコメントを使用して、IE 8より前のすべてのバージョンに固有のスタイルシートを含めることです。
<!--[if lt IE 8]> Include CSS here <![endif]-->
含まれているCSSは、警告を表示するように設定したり、ページ上のオーバーレイを有効にして、ユーザーを「ロックアウト」することができます。意図したとおりに機能しない場合にユーザーを混乱させる可能性のある、ページ上の重要な要素を非表示にするいくつかのルールを含めることをお勧めします。
他のオプションは、ユーザーを別のページにリダイレクトすることです-私はリダイレクトの大ファンではありませんが、注意して使用した場合、それらは適切な解決策になる可能性があります。
理由大量のユーザーをサイトから締め出していますか?時間を取ってJavaScriptを適切にデグレードする方法、またはその逆を検討する必要があるかもしれません。 JavaScriptで「段階的に強化する」。
一方、サイトを使用している組織が使用するシステムを制御できる場合があります。その場合は、標準以外のシステムを使用するためにユーザーをロックアウトすることもできます。
CSS条件付きコメントを使用できます
<!--[if IE 8]>
Special instructions for IE 6 here
<![endif]-->
JavaScriptを使用して、リクエストを送信したブラウザを確認できます>
<script type="text/javascript">
function detectBrowser()
{
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
if (browser=="Microsoft Internet Explorer")
&& (version>=8))
{
alert("Your browser is good enough!");
}
else
{
alert("It's time to upgrade your browser!");
}
}
</script>
このパーティーは終わりましたか? > <
ですが、こちらの情報は少し更新できると思います。
今日の基準では、「今日」は2013年10月29日なので、このメタタグを使用して最新のIEブラウザモードとドキュメントモードをトリガーし、GoogleのChrome古いIEのフレーム:
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
これにより、特定のIE6/7スタイルを提供できます。私は「スタイル」ではなく「スタイル」と言っていることに注意してください。つまり、単一のCSSファイルのみを使用し、その中にすべてのIE6およびIE7スタイルがあります。これはHTTPリクエストを最小限に抑えるためのものです...しかし、それはまったく異なる会話です。
とにかく、上記のスニペットでは、スクリプトや条件付きコメントは必要ありません。
注:Google Chromeフレームは2014年1月に廃止される予定です 詳細はこちら 。