他のサイトに埋め込まれた JavaScript ウィジェット (埋め込まれた JS および HTML コードの一部) があります。変数名がホスティング ページの変数と競合しないようにするにはどうすればよいですか?
このウィジェットを iframe ではなく、ホスティング ページと同じページに「インライン化」したいのですが、ホスティング ページとの名前の競合や他のウィジェットとの競合を回避する最善の方法は何ですか?
名前の競合は、いくつかの方法で発生する可能性があります。
- JavaScript 変数名
- JavaScript 関数名
- DOM 要素の識別子
- CSS クラス名
- おそらくもっとある...
名前の競合を回避する方法はいくつか考えられますが、ベスト プラクティスやその他の一般的な推奨事項があるかどうか疑問に思っていました。だからここに私の2cがあります:
- 長くて一意になるような名前を使用してください。それは醜く、完全な証拠ではありませんが、概念は単純です。
- iframe を使用します。しかし、前述のように、いくつかの理由から iframe を使用したくありません。ウィジェットにページからスタイル属性 (デフォルトのフォントや背景色など) を継承させたいのですが、最も重要なのは、ウィジェットがどのくらいの大きさになるかわかりません。リアルタイム データに依存し、任意のサイズになる可能性があります。
- (function(){my code here})() など、より適切なスコーピングのために匿名関数を使用します。このソリューションは、エレガントですが、最初はまだ機能しません。衝突したJS名のみを解決しますが、DOM IDまたはCSSクラス名は解決しません.2番目に、コールバック関数を提供する必要があるjsonpも使用しますこれは最終的にグローバル スコープ内にある必要があるため、無名関数スコープ内でネストすることはできません。
- JS 変数と関数の一意性を提供する JavaScript で名前空間メカニズムを作成します。スタイル window['my_app'][variable_name] または window['my_app']function_name の何か。それも少し醜いですが、少なくとも私は名前空間を制御しており、一意の名前空間であることが保証されています。