我有一个嵌入在其他网站上的JavaScript小部件(嵌入式JS和HTML代码)。我该怎么做以确保它的变量名称不会与托管页面变量发生冲突?
我希望这个小部件“内联”意味着与托管页面在同一页面上,不是在iframe中,避免与托管页面冲突或冲突的最佳方法是什么与其他小部件?
名称冲突可能以多种方式发生:
我可以想出几种避免名字冲突的方法,但我想知道是否有最佳做法或其他一般性建议。 所以这是我的2c:
答案 0 :(得分:4)
Javascript名称空间:
http://www.codeproject.com/KB/scripting/jsnamespaces.aspx
它在很多javascript框架/库中大量使用,比如YUI: http://developer.yahoo.com/yui/yahoo/
答案 1 :(得分:3)
在我之前的项目中,我有一个嵌入在其他网站上的小部件,为了防止名称冲突,我在嵌入网站中使用了两个字母前缀的所有名称前缀(我从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”)。