2

jQueryに使用していたプラグイン(この場合はjFeed)が機能していない場合にデバッグに時間がかかる問題が発生しました。問題は、 AmazonAssociatesの製品プレビューも使用したために発生しました。製品プレビューコードには、jQueryの別のコピーを含む、document.write()を介した他の多数のJSファイルが含まれることになります。製品プレビューコードがjFeedスクリプトの下に表示されたため、jQueryはgetFeed関数なしで再定義されました。

jQueryのような特定のオブジェクトがページ上で一度だけ定義されるようにするためのベストプラクティスはありますか?C / C ++で#ifndefのようなものを考えていますが、jQueryを動的にプルするコードを再度記述しなかった場合、どのように機能するかわかりません。

4

2 に答える 2

2

あなたの状況では、jQuery変数を別のものとして再定義するのがおそらく最善だと思います。他の jQuery コードは別のバージョンを使用している可能性があるため、使用している jQuery を示す新しい変数を定義する必要がある場合があります。

次のようなことができます。

 <script>
    var $jMain = jQuery;
 </script>

またはの$jMain代わりに を使用します。これを行うときに、正しい jQuery オブジェクトがあることを確認するのはあなた次第です。これがドキュメントです。jQuery$

于 2010-02-10T06:34:43.633 に答える
0

残念ながら、1 つの JS サンドボックス内の環境 (ブラウザーのウィンドウやフレーム内など) は、さまざまな場所からスクリプトを取り込む現代の世界を実際にサポートするようには設計されていません。「このオブジェクトを定義して、再定義に耐えられるようにしてください」とは言えません。(試してみれば、Javascript 組み込みのほとんどを再定義することさえできます!)

最善の方法は、コードが最後に評価されるようにすることです。これにより、実行時の環境の状態に対する最終的な決定権が得られます。これは、他のコードが後で現れて定義を壊すことができないという意味ではありませんが、それは一般的に非常に悪い形式です。たとえば、script タグをドキュメントの本文の最後の要素にすることで、これを行うことができます。

この jQuery メソッドも参照してください。直接的には役に立ちませんが、ページ共有の解決策について考えさせられます: http://api.jquery.com/jQuery.noConflict/

于 2010-02-10T06:33:22.360 に答える