我有一個企業應用程序,它導入一些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