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