IE6 / IE7ブラウザーにメッセージを表示してIE8にアップグレードし、IE8にIE7警告を表示させないようにするにはどうすればよいですか?
-
03-07-2019 - |
質問
IE8(IE6、IE7ではない)または別のブラウザーを使用しているユーザーのみがログイン時に自分のサイトにアクセスできるようにします。
フォローしました: http://code.google.com/p/ie6- upgrade-warning / しかし、IE7ユーザーがログインしたときにメインサイトを使用できないようにしたかったのです(パブリックページを表示できます)。理由は、メインWebアプリケーションには、IE8レンダリングモードで100%しか機能しない多くのJavaScript効果があるため(またはIE以外のブラウザ)。
ie6アップグレード警告をie7に変更する際の問題は、IE8がIE7レンダリングモードでWebページを表示し、<!> quot; lies <!> quot; 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をアップグレードすることをお勧めします。 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サイトを使用できるようにする必要があります。
IE 8+モードを強制するのではなく、条件付きコメントと単純なJavaScriptチェックの組み合わせを使用します。 document.documentMode
プロパティはバージョン8で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>
注:訪問者がアドバイスを無視した場合、しばらく再び表示されることはありません。
その他の情報:こちら
(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 / etcがIE8のレンダリングモードにどのように影響するかについての良い投稿は次のとおりです。 Internet Explorer 8の互換モードについて
おそらく、最良の方法は、ユーザーのブラウザーのUser-Agent文字列を検出し、古いバージョンのIEを使用している場合、アップグレード(または、FirefoxやChromeなどの別のブラウザーをダウンロード)を求めるページにリダイレクトすることです。この IE開発者ブログエントリ。 IEの古いバージョンも同様のパターンに従います。
ただし、特定のパターンに従っていないユーザーエージェント文字列は無効であると想定してください。 MSIE([0-9])をチェックして、範囲内にあるかどうかを確認してください。完全に欠落している場合は、ブラウザがサポートされていると想定してください。 MSIE 7の場合、互換モードを示すTridentマーカーをさらにチェックします(そして、ユーザーにオフにするように依頼します)。これにより、他の将来の新興ブラウザがページをレンダリングする際に、ドアを閉めることなく格闘できる可能性があります:)
前述したように、これを実現する最良の方法は、条件付きコメントを使用して、8より前のIEのすべてのバージョンに固有のスタイルシートを含めることです。
<!--[if lt IE 8]> Include CSS here <![endif]-->
含まれているCSSは、警告を表示するように設定するか、ページ上のオーバーレイを有効にしてユーザーを「ロックアウト」することができます。ページ上の重要な要素を非表示にするルールを含めることをお勧めします。これらのルールは、意図したとおりに機能しない場合にユーザーを混乱させる可能性があります。
他のオプションは、ユーザーを別のページにリダイレクトすることです-私はリダイレクトの大ファンではありませんが、注意して使用すれば適切なソリューションになる可能性があります。
サイトから大量のユーザーをロックアウトしている理由を検討しましたか? たぶん、JavaScriptを適切に劣化させる方法、またはその逆の方法を考え出す時間を取る必要があります。 JavaScriptで「段階的に強化」。
一方、サイトを使用する組織が使用するシステムを制御できる場合があります。その場合、非標準システムを使用するために人を締め出すことはおそらく問題ありません。
CSS条件付きコメントを使用できます
<!--[if IE 8]>
Special instructions for IE 6 here
<![endif]-->
javascriptを使用すると、どのブラウザがリクエストを送信したかを確認できます<!> gt;
<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>
このパーティーは終わりましたか? <!> gt; <!> lt;
そうですが、ここの情報は少し更新できると思います。
今日の標準では、<!> quot; today <!> quot; 2013年10月29日であるため、このメタタグを使用して、最新のIEブラウザーおよびドキュメントモードをトリガーし、古いIEでのGoogleのChrome Frameのインストールをトリガーできます。
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
これにより、特定のIE6 / 7スタイルをサーバーに提供できます。 「スタイル」ではなく「スタイル」を言っていることに注意してください。つまり、1つのCSSファイルのみを使用し、その中にはすべてIE6およびIE7スタイルが含まれます。これはHTTPリクエストを最小限に抑えるためです...しかし、それはまったく異なる会話です。
とにかく、上記のスニペットがあれば、スクリプトや条件付きコメントは必要ありません。
注: Google Chrome Frameは2014年1月に廃止されます-詳細はこちら。
あなたは<!> quot;禁止<!> quot;あなたのウェブサイトのIE 6および7ユーザーはばかげています。多くの人は、仕事の制限や方法がわからないため、ブラウザをアップグレードしたり、別のブラウザをインストールしたりできません。これらの人々があなたのサイトを使用することを禁止すると、長期的にはユーザーにコストがかかります。
JavaScriptを修正するか、問題を回避するか、適切に機能を低下させて、サイトがオフになっていても正常に機能するようにします。
編集:以下のコメントに、この投稿に実際にあるはずの情報をいくつか追加しました:
IEを検出して回避することができます。地獄、条件付きコメントを使用して、異なるバージョンのJavaScriptを読み込むことさえできます。 JSフレームワークを使用すると、ブラウザー間の違いが抽象化され、心配する必要はありません。または、 IE7.js をつかんでサイトに貼り付けるだけで、信じられないような動作をします。