我有一个企业应用程序,它导入一些java脚本库(比方说A)和全局命名空间中的一些功能。如何避免javascript命名空间冲突?
我们的客户可以扩展我们的平台并导入jquery,这将导致命名空间冲突。
什么是最好的方式帮助客户不要击中名称空间冲突,因为jquery非常流行,每个客户都会使用它。
如何更改库A的命名空间?什么是最方便和最安全的方式来做到这一点。
我有一个企业应用程序,它导入一些java脚本库(比方说A)和全局命名空间中的一些功能。如何避免javascript命名空间冲突?
我们的客户可以扩展我们的平台并导入jquery,这将导致命名空间冲突。
什么是最好的方式帮助客户不要击中名称空间冲突,因为jquery非常流行,每个客户都会使用它。
如何更改库A的命名空间?什么是最方便和最安全的方式来做到这一点。
对于jQuery,最简单的方法是使用jQuery.noConflict()来获得一个新的选择变量而不是$。
var j$ = jQuery.noConflict();
j$('#test-id')
您应该构建一个不允许您的客户影响全局空间的界面。
将您客户的代码包装在自己的功能中。
(function() {
var window, global; // Keep these private to this function
// Customer code here
])();
您将需要为他们提供一个接口来访问您的函数,但是您如何做到这一点取决于您的应用程序,所以我不能提供示例。这可能就像传入一个参数一样简单,该参数允许访问包含需要由该客户代码操作的对象的对象。
现在,这并不适用于所有事情。显然,你大大限制了他们的代码访问权限。您需要自行提供对该功能的访问权限。
AdSafe也许对您有所帮助,有关更多信息,请参见http://www.adsafe.org/。
好运
使用此结构:
(function ($, a, b) {
// ... place your code here
})(jQuery, myLibraryA, otherLibraryB);
这是所谓的“匿名函数”,创建一个本地范围内(内声明的所有变量和函数将本地和不会干涉与其他代码)。它导入三个库,jQuery,myLiberayA和其他库B,并且在本地范围内,它们在名称$,a和b下可见。
如果你想使用第三方JavaScript库的组合,你也可以这样做: 基本上为每个对象创建另一个名称空间;
if(window.jQuery && !(window.MyjQuery)){
var window['MyjQuery'] = window.jQuery;
var j$ = window['MyjQuery']; //alias
j$(document).ready(function(){
//code goes here...
});
}
在你的匿名函数中声明window&global有什么意义?本地范围是否仍然能够看到窗口等全局属性? – Sledge 2017-05-23 15:08:44