如何避免JavaScript小部件中的名称冲突
我有一个JavaScript小部件(一段嵌入的JS和HTML代码),它嵌入在其他网站上。我应该怎么做才能确保它的变量名不会与宿主页面变量冲突 我希望这个小部件是“内联”的,意思是在与宿主页面相同的页面上,而不是在iframe中,避免名称与宿主页面冲突或与其他小部件冲突的最佳方法是什么 名称冲突可能以多种方式发生:如何避免JavaScript小部件中的名称冲突,javascript,html,widget,Javascript,Html,Widget,我有一个JavaScript小部件(一段嵌入的JS和HTML代码),它嵌入在其他网站上。我应该怎么做才能确保它的变量名不会与宿主页面变量冲突 我希望这个小部件是“内联”的,意思是在与宿主页面相同的页面上,而不是在iframe中,避免名称与宿主页面冲突或与其他小部件冲突的最佳方法是什么 名称冲突可能以多种方式发生: JavaScript变量名 JavaScript函数名 DOM元素标识符 CSS类名 也许更多 我可以想出几种避免名字冲突的方法,但我想知道是否有最佳实践或其他一般性建议。 这是我
- JavaScript变量名
- JavaScript函数名
- DOM元素标识符
- CSS类名
- 也许更多
在我以前的项目中,我有一个嵌入在其他站点上的小部件,为了防止名称冲突,我在嵌入站点中使用的所有名称前面加了一个两个字母的前缀(我是从Objective C得到这个想法的,在Objective C中,所有类都以前缀开头,如NS…) 当然,我也使用了名称空间(例如var Foo={bar:function(){…}})和“classes”(使用John Resig的类实现),因为无论我是否有小部件,我都使用它们,但是名称空间、类和全局变量或函数的名称都有前缀-例如HMWidget、HMClass、hmDoSomething()等等 关于DOM ID和CSS类——首先,我必须去掉大多数ID,因为在同一个站点上可能有来自我的服务的多个小部件。所以剩下的唯一ID是类似“widget_12345”的东西,用来区分这些小部件。其余元素由CSS类标识,所有CSS声明都是针对主小部件容器(例如“.my_widget.left_column”而不是“.left_column”)进行的