0

機能検出を使用して、他の誰かが作成したプラグインを作成し、実際に機能する/サポートされているすべてのブラウザーで機能させるにはどうすればよいですか。プラグインのドキュメントには、IE 8でサポートされていると記載されていますが、実際には機能しません。信頼性の低いブラウザ検出が原因であることはわかっていますが、実際に機能する可能性のあるすべてのブラウザで機能させるにはどうすればよいですか?

詳細

特定の例を示すために、私はjQueryが選択したプラグインバージョン0.9.7を使用しており、ドキュメントに記載されているように-

最新のブラウザはすべてサポートされています(Firefox、Chrome、Safari、IE9)。IE8のレガシーサポートも有効になっています。

ただし、多くのIE 8では機能しないが、IEテスターIE 8では機能することがわかりました。次に、プラグインコード内で、プラグインロジックから単純に脱出するこのブラウザー検出ロジックを見つけました-

if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) {
   return this;
}

そして、それ$.browser.versionが私のIE 8で7.0を返していて、それが機能していなかった理由であることがわかりました。まあ、驚くべきことは何もありません、私は知っています。$.browser.version === "7.0"IE 8で実際に機能するかどうかを確認するために、条件を削除してみました。しかし、プラグインの作成者がそれを行っており、彼はもっとよく知っているに違いないので、私はその状態を取り除くことはできません。

さて、私の質問は、機能検出を使用して、実際に機能するすべてのブラウザーで機能させる方法です。論理的なステップは、このプラグインで使用されているすべてのブラウザー機能を見つけることだと思います。では、どうすればそれを見つけることができますか?これに関する私の限られた知識をご容赦ください。私は、機能の検出、ブラウザの検出よりも優れていることなどの理論的な知識を持っていますが、機能の検出を行うコードを実際に使用したことはありません。私はこれについて約1〜2年前に学びました。

そして今回検索したところ、 Modernizerのことを知りました。これは役に立ちますか?次世代のHTML5およびCSS3を利用したWebサイトを構築するためのものであり、HTML5、CSS3はまだあまり使用されていないため、わかりません。または、プラグインに必要なすべての機能がわかったら、jQuery.supportで十分です。

いくつかのさらなる推論

私はこの質問を見つけましたオブジェクト/機能の検出によるブラウザの検出ここで、作成者は、機能検出を使用してブラウザーが実際に何であるかを把握できるかどうかを尋ねます。あるコメントによると、「機能検出の全体的なポイントは、ブラウザが実際に必要な機能を備えているかどうかを確認できるようにすることです。正しく行うと、実際にはブラウザが何であるかは気にせず、ただそれが必要かどうかだけが気になります。仕事をするのに必要な機能があります。」私はこれを理解して同意しますが、特定のプラグインがこれらのブラウザーでサポートされていると言うことのポイントは何ですか。プラグインの作成者が必要なすべての機能をリストアップして、人々が使いやすいようにしないのはなぜですか?しかし、サポートされているブラウザーをリストすることの背後にあるポイントは、理想的なブラウザーを想定することによって互換性のアイデアを提供しているように見えます。

たとえば、2つの理想的なIE 6ブラウザーでは、ポップアップdivに干渉する同じ選択ドロップダウンz-indexの問題が発生します。プラグインに問題があるとします。このプラグインがIE6と互換性がないと言うことは、理想的なIE 6ブラウザーであり、ユーザーエージェントが調整されてブラウザーバージョンとしてIE6を返す別のIE8ブラウザーではないことを意味します。

その場合(サポートされているブラウザーのリストの背後にあるポイントは、理想的なブラウザーを想定して互換性のアイデアを提供しているだけです)、機能検出を使用してブラウザーを識別することは理にかなっていますか?もしそうなら、なぜ多くのサンプルスニペットが利用できないのですか?

たくさんの質問..:)私は推測します、今日私はそれをすべて尋ねました...

4

1 に答える 1

0

プラグインで、またはプラグインを使用する前に、これを実行しようとする場合があります。

var checkString = '<!--[if lt IE 7 ]> <div id="my-id" class="lt-ie7" > <![endif]--><!--[if IE 7 ]> <div id="my-id" class="ie7"> <![endif]--><!--[if IE 8 ]> <div id="my-id" class="ie8"> <![endif]--><!--[if IE 9 ]> <div id="my-id" class="ie9"> <![endif]--><!--[if (gt IE 9)|!(IE)]><!--> <div id="my-id" class="other"> <!--<![endif]-->';

$('body').append(checkString);

$('body').append('Your browser is: '+$('#my-id').attr('class'));

例: http://jsbin.com/inisol

ところで:IEをテストする必要はありません。それがうまくいくことを願っています。

于 2012-02-09T16:43:18.237 に答える