2012-02-09 4 views
0

プラグインは、他の人によって書かれたもので、実際に機能するかサポートされているすべてのブラウザで動作するようにするにはどうすればよいですか? プラグインのドキュメントでは、IE 8でサポートされていると言われていますが、実際には動作しません。私はそれが信頼できないブラウザ検出のためだと知っていますが、それが実際に動作するすべてのブラウザで動作するようにするにはどうすればよいですか?誰かが書いたjqueryプラグインを作成するには、実際に動作するすべてのブラウザで動作しますか?

詳細

ただ、具体的な例を与えるためには、ドキュメントが言うように私はjQueryのに選ばれたプラグインのバージョン0.9.7を使用しています -

すべての近代的なブラウザは、(Firefoxの、ChromeをサポートしていますSafariとIE9)。 IE8のレガシーサポートも有効です。

-

しかし、私はその後、プラグインのコード内で私は単にプラグイン・ロジックの外に脱出このブラウザ検出ロジックを発見し、それは多くのIEの8Sでは動作しないことがわかったが、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を搭載したウェブサイトを構築するためのものであり、HTML5、CSS3はまだ使用していないため、わからない。または、プラグインで必要なすべての機能がわかったら、私には十分なjQuery.supportです。

さらにいくつかの推論

私は著者が、ブラウザが実際にあるかを把握するために、特徴検出を使用することが可能であるかどうかを尋ねるこの質問Browser detection via object/feature detectionを見つけました。 1つのコメントはこう述べています。「機能検出のポイントは、ブラウザに実際に必要な機能があるかどうかを調べることができるようにすることです。実際にブラウザを気にする必要はありません。あなたが仕事をするために必要な機能を備えています。私はこれを理解して同意するが、その後、これらのブラウザでは特定のプラグインがサポートされているという点が何であるか。なぜプラグイン作者は必要なすべての機能をリストアップしないので、人々は使いやすくなっていますか?しかし、サポートされているブラウザをリストアップしている点が、の理想的なブラウザと仮定することによって、互換性の考え方を与えているようなものです。

たとえば、2つの理想的なIE 6ブラウザでは、ポップアップdivを妨害する同じ選択ドロップダウンZインデックスの問題が発生します。プラグインがこれに問題があるとしたら、このプラグインがIE 6と互換性がないと言って、理想的なIE 6ブラウザではなく、IE 6をブラウザバージョンとして返すIE 8ブラウザではありません。

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

多くは.. :)私は推測、今日私はあなたがプラグインにまたはあなたがプラグインを使用する前にこれを実行しようとするかもしれない...

+2

ブラウザの検出を完全に削除して、関連するすべてのブラウザでテストするだけではいかがですか? BTW:私はIE Testerを信用しません...それは単なるシミュレーションであり、それ自身のレンダリングのバグを含んでいます。 – Sparky

+0

質問は矛盾しています:あなたは、開発者がブラウザを検出することによって_ "よく知っている"ことを認めています。次に、ブラウザの検出を取り除かずにどのように欺くことができるかを聞いてみましょう。あなたがそれを回避する方法を探しているときに、ブラウザの検出を維持することに意味はありません。 – Sparky

+2

**引用**:_ "$ .browser.versionがIE 8で7.0を返すことが判明しました" _実際の問題は、あなたのHTMLが[検証していない]ことです(http://validator.w3.org /)、IEがCompatibilityモードまたはQuirksモードになっています。 – Sparky

答えて

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

Btw:IEをテストしないでください。それがうまくいくことを望みます。

関連する問題