0

私のアプリケーションの JavaScript は jQuery と jQuery プラグインを使用しており、制御できない「悪意のある」環境で実行されています (これは e コマース プラットフォームの PHP 拡張機能です)。したがって、誰かがjQuery /プラグインのインスタンス(他の拡張機能によって導入された)をアタッチする前にjQueryコードが実行されるか、この後に実行されるか、ページがレンダリングされた後に誰かがjQueryを動的にロードするかどうかを判断する方法はありません.

基本的に問題は、他の拡張機能が (プラグインを使用して) jQuery を使用する可能性があり、jQuery をタグで接続するだけでは機能しないことです。

グローバル スコープを汚染することなく、特定のバージョンの jQuery プラグインをカプセル化されたスコープにロードするために、RequireJS が必要なバージョンの jQuery をロードするのに役立つ可能性があると強く感じています (したがって、他の拡張機能は引き続き適切に機能します)。次に、すべてのコードを「require」ステートメントにラップし、独自の jQuery とプラグインのセットを使用して実行します。私はこれを試してみましたが、うまくいきました(ただし、本番環境ではテストしていません)が、奇妙な方法でした。この質問は、私が抱えている問題に関連しているようです。また、AMD 互換バージョンの jQuery を使用することを提案する回答もあります。しかし、プラグインはどうですか?私が使用するすべてのプラグインにそのようなバージョンがあるとは思いません。

だから質問:

そのようなユースケース(未定義の環境でjQuery +プラグインを実行する)をカバーするためにRequireJSを使用できますか?そこで RequireJS を使用できる場合は、これを適切に行う方法のサンプル コードまたは説明をいただければ幸いです。これを RequireJS でカバーする方法がない場合、問題を処理するための最善の方法は何だと思いますか?

4

1 に答える 1

1

はい、RequireJSがここであなたを助けることができると私は信じています。私の知る限りでは、しかし、あなたはいくつかの足取りをしなければならないでしょう。(2012-08-19現在)最新のjQueryのソースを見てください:linkwindow.jQuery下部に、設定、定義jQuery、およびが表示されていることがわかります$defineその後、AMDローダーの呼び出しが発生するためjQuery、何があってもグローバルスコープになります。あなたがしたいのは、あなた自身のバージョンのjQueryとプラグインが他のjQueryインスタンスとプラグインから分離されたままであることを保証することです、正しいですか?

カスタムjQueryとプラグインを独自のディレクトリ(「jqcustom」と呼びましょう)に配置し、スクリプトのdefine呼び出しで依存関係を指定するときにそのディレクトリを使用します。jQueryのバージョンを変更するには、jQueryを呼び出しでラップしdefine、オブジェクトを一番下に返し、 jQueryと割り当て、およびプロセスのデフォルトの呼び出しjQueryを取り出します(これらは両方とも一番下にあります。覚えておいてください)。次に、すべてのプラグインを呼び出しでラップし、依存関係として独自のバージョンを指定する必要があります。例:window.jQuerywindow.$definedefinejQuery

define(['jqcustom/jquery'], function(jQuery) {
    //inside this method 'jQuery' will override any predefined global window.jQuery

    //in case any plugins use the $ variable, define that locally too
    var $ = jQuery;

    //... plugin code ...

});

RequireJSのオプティマイザーを使用すると、shimconfigオプションを使用してプラグインのラッピングを実行できますjQueryjQueryプラグインは、jQueryのプロトタイプオブジェクトにメソッドを追加することで機能するため、ラッピングを使用してすべてのプラグインに同じ(カスタムjqcustom/jqueryプラグイン)を渡す限りdefine、プラグインの拡張機能はすべて同じオブジェクトに設定され、後続でアクセスできるようになります。カスタムまたはカスタムプラグインを依存関係としてdefine指定する呼び出し。jQuery幸運を!

于 2012-08-19T20:49:36.540 に答える