3

position:fixed の欠如を回避するには、IE6 を検出する必要があります。私は単純な正規表現を使用しています:

var isIE6 = /msie|MSIE 6/.test(navigator.userAgent);

これは、ブラウザーが IE6 と IE7 の両方であると主張するユーザーを除いて、ほぼ常に機能します。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30)

栄光。

jquery.supportを使用したいのですが、それは position:fixed が利用可能かどうかのクエリをサポートしていないようです。それで、IE6の検出に戻りました。

maxHeight の存在を探すなど、さまざまな解決策が提案されています。しかし、それらはかなりランダムに見えて私を怖がらせます - 上記の正規表現に例外がある場合、maxHeight に例外がないことをどのように確認できますか?

私は条件付きコメントを使用することを考えています-そうすれば、少なくともハックではなく、IE6であると主張するIE自体になります。何かのようなもの:

<!--[if IE 6]>
<SCRIPT> var isIE6 = true; </SCRIPT>
<![endif]-->

または、 position:fixed が利用可能かどうかを直接テストする関数もありますが、少し重いようです。

条件付きコメント アプローチが機能しない理由はありますか? より良いアプローチはありますか?

4

6 に答える 6

6
<script type="text/javascript">
    if (nothing_works) {
        is_ie6 = true;
    }
</script>

真剣に、あなたの条件付きコメントはおそらく最良かつ最も正確な検出方法です. ブラウザーがユーザー エージェントにある場合でも、条件付きコメントを IE6 のように解析しない可能性があります。

家に帰って、誰かがまだ IE6 用に開発していることを知って、少し泣かなければなりません。

于 2010-08-05T21:46:53.873 に答える
5

ポール アイリッシュは、特にサポートを確認するための追加を書きました。可能な限り、ブラウザー検出ではなく機能検出を使用して、このルートに進むことをお勧めします。$.supportposition: fixed

その追加の最後の関数、この部分を含める必要があるだけです。

$.support.positionFixed = (function() { ..... })();

これを jQuery の後に含めると、次のようにコードで使用できます。

if(!$.support.positionFixed) {
  //handle browsers that don't support it
}
于 2010-08-05T21:48:08.793 に答える
1

IE の問題を克服するために私が遭遇した最善の方法は、条件付きコメントを使用することです。

<!--[if IE 6]>
... link IE 6 specific stylesheet or a script...
<![endif]-->

このアプローチにより、ページの上位互換性も確保されるため、IE の将来のバージョンでは、すべての IE6 (およびそれ以前) のスタイルを必要とせずにページをレンダリングできます。

于 2010-08-05T21:50:17.487 に答える
0

条件付きコメントも一緒に行かなければならないと言います。CSSやJavaScript、またはそこに置きたいものなら何でもうまく機能します。それが最良の選択肢であるように私には思えます。ただし、例で使用したような変数は使用しません。私は、元の非ie6コードで行っていることをすべてオーバーライドする外部ie6.jsリンクを探します。そうすれば、クリーンなコードでie6のジャンク/変数を取得できなくなります。

<!--[if IE 6]>
<script type="text/javascript" src="ie6.js"></script>
<![endif]-->
于 2010-08-05T22:24:11.120 に答える
0

機能検出に関する IE ブログに、素晴らしく詳細な投稿があります。

http://blogs.msdn.com/b/ie/archive/2010/04/14/same-markup-writing-cross-browser-code.aspx

基本的に、彼らは (当然のことながら) ブラウザのバージョン検出に反対しています:

「してはいけないこと: 特定のブラウザを検出する」

あなたの例のように、ブラウザがバージョンについて嘘をつくシナリオは非常に多いため、代わりに機能検出を使用することをお勧めします。

于 2010-08-05T21:50:30.543 に答える
0

http://api.jquery.com/jQuery.browser/

if ($.browser.msie && parseInt($.browser.version) == 6) {
  // do something
}
于 2010-08-05T21:45:51.527 に答える