3

グローバル名前空間にいくつかの機能を持ついくつかのJavaスクリプトライブラリ(Aとしましょう)をインポートするエンタープライズアプリがあります。

当社のお客様は、当社のプラットフォームを拡張して jquery をインポートできますが、その結果、名前空間の競合が発生します。

jqueryは非常に人気があり、すべての顧客がそれを使用するため、顧客が名前空間の競合を起こさないようにするための最善の方法は何ですか.

ライブラリ A の名前空間を変更するにはどうすればよいですか? それを行うための最も便利で安全な方法は何ですか。

4

5 に答える 5

3

jQuery の場合、最も簡単な方法は、$ の代わりにjQuery.noConflict()を使用して新しいセレクター変数を取得することです。

var j$ = jQuery.noConflict();

j$('#test-id')
于 2013-03-27T18:31:10.613 に答える
2

顧客がグローバル スペースに影響を与えることを許可しないインターフェイスを構築する必要があります。

顧客のコードを独自の関数にラップします。

(function () {
  var window, global;  // Keep these private to this function
  // Customer code here
])();

関数にアクセスするためのインターフェイスを提供する必要がありますが、その方法はアプリケーションに依存するため、例を提供することはできません。その顧客コードによって操作する必要があるものを含むオブジェクトへのアクセスを提供するパラメーターを渡すのと同じくらい簡単かもしれません。

さて、これはすべてにうまくいくわけではありません。明らかに、コードがアクセスできるものを大幅に制限しています。その機能へのアクセスを自分で提供する必要があります。

于 2013-03-27T18:33:06.340 に答える
2

次の構成を使用します。

(function ($, a, b) {
   // ... place your code here   
})(jQuery, myLibraryA, otherLibraryB);

これはいわゆる「匿名関数」であり、ローカル スコープを作成します (内部で宣言されたすべての変数と関数はローカルになり、他のコードに干渉しません)。jQuery、myLiberayA、otherLibraryB の 3 つのライブラリをインポートし、ローカル スコープでは $、a、b という名前で表示されます。

于 2013-03-27T18:34:09.770 に答える
1

サードパーティの JavaScript ライブラリを組み合わせて使用​​する場合にも、これを行うことができます。基本的には、オブジェクトごとに別の名前空間を作成します。

if(window.jQuery && !(window.MyjQuery)){
  var window['MyjQuery'] =  window.jQuery;
  var j$ = window['MyjQuery']; //alias

  j$(document).ready(function(){
    //code goes here...
  });

}
于 2013-04-26T19:55:57.370 に答える
0

AdSafe も興味深いかもしれません。詳細については、 http: //www.adsafe.org/ を参照してください。

幸運を

于 2013-03-27T18:33:45.633 に答える