16

この質問に対する明らかな答えがある場合は申し訳ありませんが、私はそれを見つけることができませんでした. jQuery 2 への切り替えを検討しており、古いブラウザーのサポートについては心配していませんが、サポートされていないブラウザーを使用しているユーザーにサイトを使用できないことを伝えたいと考えています。

ここ ( http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/ ) で、条件付きコメントを使用して、異なるバージョンの IE で .js ファイルを分岐できることがわかります。しかし、jQuery 2.0 は IE だけでなく、他の多くのブラウザーのサポートも終了すると私は信じています

理想的な世界では、jQuery 2 に切り替えてから、jQuery がブラウザーをサポートしていないと通知したときに呼び出される単一の JavaScript 関数を用意します。私が見逃しているこれを行う簡単な方法はありますか?

ありがとう。

編集:

この投稿 ( http://bugs.jquery.com/ticket/13404 ) に出会い、ここに誘導されました: http://jquery.com/browser-support/。サポートに関しては、jQuery 2 は IE ブラウザー上の jQuery 1.9 とのみ異なることがわかりました。したがって、おそらくより適切な質問は、jQuery でサポートされていないブラウザー (一般的にはバージョン 2 だけではない) を検出する方法です。質問のタイトルを更新しました。

EDIT2:

機能検出はこの問題に対する最も推奨されるアプローチであるため、ここ ( http://api.jquery.com/jQuery.support/ )で jQuery サポート メソッドが関連しているようです。ただし、信頼するのはかなり難しいようです (通知なしに変更される可能性があるため)。

これが重要な質問を作成すると思います。jQuery のどの機能が古いブラウザからサポートされていない可能性があるか、または影響を受けないかを知るにはどうすればよいでしょうか? たとえば、誰かが Firefox の 4 バージョン前のコピーを持ってサイトにアクセスした場合、どの機能をテストする必要があるかわかりません。HTML5 の場合のように、jQuery が何らかの完全にサポートされている機能テストを提供できれば、それは素晴らしいことです: http://html5test.com/

EDIT3:

条件付きインクルード ステートメント (以下の回答と jQuery のサイトで強調表示されています) を使用すると、古いバージョンの IE を処理できます。ただし、他のブラウザの場合は、少し注意が必要です。関数 x、y、または z に対するブラウザーのサポートについては、jQuery に頼ることはできないため、私のアプローチは単純に基礎となる JavaScript を照会することです。CSS ベースのサポートを照会する場合は、modernizr を使用できます。JavaScript ベースのサポートについては、これは私が他のブラウザの SUPER 古いバージョンを検出するために使用する方法です。

function browser_ok() {

    if  (
            ( !Array.prototype.indexOf ) ||
            ( !Array.prototype.forEach ) ||
            ( !String.prototype.indexOf ) ||
            ( !String.prototype.trim ) ||                
            ( !Function.prototype.bind ) ||
            ( !Object.keys ) ||
            ( !Object.create ) ||
            ( !JSON ) ||
            ( !JSON.stringify ) ||
            ( !JSON.stringify.length ) ||
            ( JSON.stringify.length < 3 )
        )
    {
        return false;
    }

    // # local storage support
    // source: http://diveintohtml5.info/storage.html

    try {
        var local_storage_support = ( 'localStorage' in window && window['localStorage'] !== null );
        if ( !local_storage_support ) {
            throw new Error("local_storage_support: failed");
        }
    }
    catch ( e ) {
        return false;
    }

    // # AJAX uploads

    if ( !window.FormData || !window.FileReader ) {
        return false;
    }

    // # HTML data elements

    var body = $("body");
    body.data("browser_support_test",42);
    if ( body.data("browser_support_test") !== 42 ) {
        return false;
    }
    else {
        body.removeData("browser_support_test");
    }

    return true;
}

AFAICT、この関数は、jQuery の基本機能に問題を引き起こす可能性のあるすべてのブラウザーを排除するはずです。何か凝ったことをしたい場合は、必要なことがわかっている特定の機能がおそらくあるので、それを具体的に確認できます。

4

2 に答える 2

9

IE 6、7、および 8 をサポートしながら jQuery 2.0 の利点を得る方法は、条件付きコメントを使用することです。

<!--[if lt IE 9]><script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><![endif]-->
<!--[if IE 9]><!--><script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!--<![endif]-->
<script>window.jQuery||document.write('<script src="jquery.js"><\/script>');</script>
  • 最初の条件付きコメントは、jQuery 1.x が IE < 9 用にロードされることを保証します。
  • jQuery の最新バージョン (2.0.3) は、条件付きコメントが認識されない IE 9 およびブラウザーで使用されます (IE 10 では条件付きコメントのサポートが終了しました)。
  • jQuery が CDN からの読み込みに失敗すると、フォールバック (jquery.jsサーバーでホストされている) が読み込まれます。
于 2013-08-06T19:20:11.553 に答える
7

IE 6、7、および 8 のサポートが終了したようです。使用できるはずです。

HTML:

<!--[if lt IE 9]> <html data-browser="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->

JS:

if( document.documentElement.getAttribute('data-browser') !== null ){
    // not supported by jQuery 2.x
}

古いブラウザーをサポートすることに決めたが、jQuery チームが 2.x に含めた改善点が必要な場合は、1.x バージョンを使用できます: http://jquery.com/download/

アップデート:

jQuery をサポートしていないすべてのブラウザーを検出することは困難/非現実的です。その理由は、jQuery が単なる JavaScript ライブラリであるためです。

ブラウザやバージョンが異なれば、javascript でいくつかの基本的なこと (ajax など) を実行するためにさまざまな方法を使用していました。これは、一部の古いブラウザが一部の機能をサポートし、他の機能をサポートしないことを意味します。このブラウザがすべての機能をサポートしている、またはこのブラウザが機能テストをサポートしていないという簡単な説明はありません。

Rob W の提案は本当に良いです。新しいバージョン (2.x) を最新のブラウザーに、1.x バージョン (レガシー サポート付き) を古いブラウザーに提供してください。

この記事をご覧ください:グレースフル デグラデーションとプログレッシブ エンハンスメントを比較し、 Modernizrライブラリの使用を検討してください。これにより、ユーザーのブラウザーがサポートしている機能を確認し、古いブラウザーのユーザーに優れたエクスペリエンスを提供しながら、最新の進歩を最大限に活用するアプリケーションを作成できます。

于 2013-08-06T18:05:06.407 に答える