10

jQuery 2.0はますます成熟しています:http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/

jQuery 2.0は古いブラウザとの互換性を損なうため、jQuery1.9をいつ使用するかを知っておく必要があります。推奨されるアプローチは、IEの条件付きコメントを使用することです。

<!--[if lt IE 9]>
    <script src="jquery-1.9.1.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0b2.js"></script>
<!--<![endif]-->
  • 現在のWeb開発のベストプラクティスは、ブラウザーのスニッフィングやユーザーエージェントの文字列の解析を避けるべきであることを示唆していますが、この種の条件付きコメントはそうではありませんか?

  • jQuery 2.0は古いInternetExplorerとの互換性を壊すだけですか?または、2.0で悪化する他のブラウザはありますか?

  • これがInternetExplorer(条件付きコメントが機能する唯一の場所)以外にも影響する場合、最適なjQueryを選択するためにどのような戦略を使用する必要がありますか?

  • JavaScript環境にグローバルにアクセス可能な値/オブジェクト/関数などがあり、その存在を使用してjQuery 2.0との互換性を通知できますか(機能検出など)?

主な質問

私のプロジェクトは現在、Require.JSを使用してコードをモジュール化しています。私のコードは現在、jQueryを必要とする最初のセクションに遭遇したときにのみjQueryをロードします。

Require.JSを使用して正しいバージョンのjQueryをロードするための最良の方法は何ですか?

私は現在検討しています:

  • Require.JSをロードする前にIEの条件付きコメントを使用し、その後jQueryを手動で「定義」します

  • JS機能を使用する-Require.JSのパスを設定するコードで検出します(何かがrequireのjQueryの前に)パスを適切に1.9または2.0に設定します(私の好みの方法)

  • 何があっても常に1.9を使用する(最も安全で退屈なアプローチ)

4

2 に答える 2

13

AMD仕様へのniaccurshiの回答の適応。

// Do this before your first use of jQuery.

var pathToJQuery
if('querySelector' in document
    && 'localStorage' in window
    && 'addEventListener' in window) {
    pathToJQuery = '//cdn/jQuery2.0'
} else {
    pathToJQuery = '//cdn/jQuery1.9'
}

require.configure({'paths':{
    'jquery': pathToJQuery
}})

require(['jquery'], function($){ /* you get the one you need here */ })
于 2013-03-05T18:48:11.647 に答える
6

実際にはもっとエレガントなソリューションがありBBC、レスポンシブニュースのウェブサイトで使用されています。

基本的に、と見なされるブラウザを検出するためnew、と互換性があるjQuery 2.0+ため、他のすべてはoldブラウザのままになります。でこれを複製できるかもしれませRequire.jsんが、現実にはそうする必要はありません...

if(querySelector in document
    && localStorage in window
    && addEventListener in window) {
    //Add jQuery 2.0+
} else {
    //Add jQuery 1.9.0+
}

//This is intended to be a flag that can be checked against to see if the jQuery library has been loaded into the browser.
var jQueryVersion = 0;
function jQueryRunning(ver) {
    //This could be "true", or could be a version number, it's largely down to your own system needs!
    jQueryVersion = ver;
}

出典: リンク

の各スクリプトにコールバック関数を追加する必要があります。この関数は、バージョン番号と同じパラメーターjQueryで呼び出しjQueryRunningます。これにより、実行する関数をさらに決定するのに役立ち、jQueryコードがいつ通知されるかを通知できるという利点があります。埋め込まれています(just in case the connection is slow and it takes a while to download)

これを使用Require.jsすることがあなたが心配したいものではないかもしれないなら!

あなたが正しいので、これはエレガントな解決策だと思います。問題は古いバージョンだけでなく、古いバージョンIEFirefox (before 3.5)古いモバイルブラウザ(javascriptを扱っている場合でも!)です。

于 2013-03-05T00:07:24.553 に答える