サポートされなくなった jquery.browser の代わりに jquery.support を使用して IE6 を検出する明確な方法が見つかりませんでした。また、Quirks モードも考慮する必要があります。
スタックに関する投稿をいくつか見ましたが、それらはすべて jquery.browser を参照しており、jquery.support のドキュメントは少しあいまいです。
これに関するヘルプは素晴らしいものであり、事前に感謝します。
サポートされなくなった jquery.browser の代わりに jquery.support を使用して IE6 を検出する明確な方法が見つかりませんでした。また、Quirks モードも考慮する必要があります。
スタックに関する投稿をいくつか見ましたが、それらはすべて jquery.browser を参照しており、jquery.support のドキュメントは少しあいまいです。
これに関するヘルプは素晴らしいものであり、事前に感謝します。
jQuery simple の作成者は、開発者がアプリケーション/Web サイトを実行しているブラウザーを確認することを望んでいないと思います。代わりに、さまざまなブラウザー機能を確認し、それに基づいて何をすべきかを決定することを望んでいます. IE6、IE8、Firefox、新しいブラウザのいずれであっても問題ありません。アプリケーション開発者は、さまざまな機能に対するブラウザーのサポートがユーザーのアプリケーションでの作業能力にどのように影響するかを理解し、それに応じて行動する必要があります。
$.browser は、特にユーザーがブラウザーでユーザー エージェントを偽装するのは非常に簡単であるため、信頼できない可能性があるユーザー エージェント文字列を使用したブラウザー スニッフィングに依存しています。その場合、IE7 として表示される IE6 がページを正しくレンダリングできないのは彼らのせいです。;)
$.browser は廃止されたにもかかわらず、引き続き使用するか、自分で何かをコーディングしようとすることができます。たぶん、そのためのjQueryプラグインがすでにありますか?前回IE6をチェックしなければならなかったとき、その方法を使用したことを知っています...
jquery.support を使用して IE6 を検出する明確な方法が見つかりませんでした
いいえ、もちろん違います — それが要点です。
特定の機能のサポートを検出し、それらの機能のサポートをコーディングすることは、存在するすべてのブラウザーとその機能を追跡しようとするよりも、ブラウザー間の互換性を維持するためのより良い方法であるという定説があります。
jquery.supportからさかのぼって、実行中のブラウザを推測し、まったく別の機能に依存する別のコードを使用することはできますが、それは完全にひねくれた行為です。ブラウザー 'X' が機能 'Y' をサポートしていると仮定するという既に脆弱なアプローチを採用し、別のレイヤーの無関係な機能スニッフィングを追加して、間違ったブラウザーを検出する可能性があるため、脆弱性をさらに高めることになります。
したがって、ドグマの答えは、IE6 やその他の特定のブラウザーを検出しないことです。jquery.support などの機能スニッフィング ソリューションを使用して、使用できる機能を直接確認します。ただし、機能「Y」の有無が、関連する別の機能「Z」を使用できるかできないかを意味するとは思わないでください。同じブラウザ「X」で。以前に会ったことのない新しいまたはあいまいなブラウザー/バージョンを考えると、それは常にうまくいかないからです.
そして、ドグマの答えは、実際、通常は正しいです。ただし、実際には機能スニッフィングでは検出できないブラウザのバグがいくつかあり、特定の回避策が必要です。そしてもちろん、これがほぼ常に行われているブラウザは IE6 です。
あなたの質問に詳細がないので、あなたがそのような状況の 1 つであるかどうかは不明ですが、That One Browser の恐ろしいハックが本当に必要な場合、おおよその最良の解決策は、条件付きコメントを JavaScript または HTML にドロップすることです。
ブラッドケーラーはその考えを持っています。以下のようなIE条件文を使用する
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js"><!--<![endif]-->
次に、javascriptと少しのjQueryを使用して、これを行うことができます。
$(document).ready(function () {
if ($('html').is('.ie6')) {
alert('You are running IE6!');
} else if($('html').is('.ie7')) {
alert("You are running IE7!");
} else {
// Browsers other than IE6 and 7.
}
});
エディターはコードの最初のセクションを共食いしているので、ここにリンクがあります-http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-nether/
廃止された .browser を使用したくないが、.support を読んで理解していないため、今いくつかのテストで少し汚いことをしました。
私が最も気に入っているのは、条件付きスタイルシートを使用して IE6 のスタイルを設定することです。それに id="IE6" を追加しただけで、jQuery で ID を検出しました。
jQuery.fn.exists = function(){return jQuery(this).length>0;}
if ($('#IE6').exists()) {
//do something
}
これは問題なく動作するようです。そこでアラートを発生させようとしましたが、IE6 でのみ取得しました。ページを検証してみたところ、HTML5 として渡されました。私が行ったことに根本的な問題があるかどうかはわかりませんが、これまでのところ問題ないようです。
あなたは次のようなことをすることができます:
var ie6to8 = jQuery.support.leadingWhitespace; var ie7to8 = jQuery.support.objectAll; if((ie6to8 &&!ie7to8)||(!ie6to8 && ie7to8)){//XORのシミュレーション //ie6です }
ドキュメントには、jQuery.support.leadingWhitespaceがIE 6、7、および8でfalseであると記載されています。また、objectAllはIEの7および8でfalseであるとも言われています。他のブラウザーでもtrueであると想定し、これらの値に対してXOR演算を実行しました。 。このように、leadingWhitespaceの値がobjectAllの値と異なる場合にのみtrueになります。これは、IE6でのみ発生します。
詳細については、http: //docs.jquery.com/Utilities/jQuery.supportをご覧ください。
更新:jQuery 1.3以降、ブラウザースニッフィングは推奨されなくなりましたが、以前の方法($.browser.msieおよび$.browser.versionを使用)で実行できます。ここで調べてください:http://docs.jquery.com/Release:jQuery_1.3
これがあなたの「要件」に合わないことはわかっていますが、私の知る限り、機能検出だけを使用する信頼できる方法はありません。
これは、IE6 を検出するために私が見つけた唯一の信頼できるものです。それは私が SimpleModal で使用しているものであり、うまく機能しているようです:
var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";