我們在這裏有一個奇怪的框架。我們有不同的功能,試圖添加依賴庫。如何只添加一次JavaScript庫?
我的問題是,有沒有辦法只添加一次庫?
例如,如果jQuery已經加載,是否有一種通用的方式不再加載jQuery?
基於URL嗎?
我在尋找類似於require_once
在PHP中實現的結果。
我們在這裏有一個奇怪的框架。我們有不同的功能,試圖添加依賴庫。如何只添加一次JavaScript庫?
我的問題是,有沒有辦法只添加一次庫?
例如,如果jQuery已經加載,是否有一種通用的方式不再加載jQuery?
基於URL嗎?
我在尋找類似於require_once
在PHP中實現的結果。
在這裏,他們解釋如何使用RequireJS以避免衝突:http://requirejs.org/docs/jquery.html#noconflictmap
是的。瀏覽器支持依賴管理類型。如果這是您的項目需求,則需要使用依賴關係管理器,或者自己寫一些類似的東西。 – 2014-10-08 22:50:18
嗯,你可以使用客戶端庫要做到這一點,如RequireJS或者您可以實現服務器端解決方案。我不太瞭解php,但是我的想法是擁有一個客戶端資源管理器對象,它位於沙盒範圍內(每個客戶端http請求一個)。該對象將實現一個方法,如loadResource
,這將確保資源只被加載一次。
沒有'通用'的方式來只加載一次JavaScript庫。當一個JavaScript被加載時,它被執行並直接注入到全局域中,並且不會有'通用'跟蹤,你可以追蹤它。這是遠程JavaScript的責任,以確保它本身不能被加載多次。然而,有一些聰明的技巧可以在這裏完成。不是直接使用腳本標記加載JavaScript,而是使用init()函數「注入」依賴關係,並且您有機會驗證腳本是否已加載。例如,如果您使用jQuery,請執行以下操作:
var jsCache = {};
function init() {
if (jsCache[myJavascript]) {
return;
}
$.getScript("my_javascript.js").done(function() {
jsCache[myJavascript] = true;
}
}
init();
不完美,但應該達到目的。如果可能,請使用requiejs(http://requirejs.org/docs/whyamd.html),但是,您必須將腳本模塊化爲AMD模塊。
當你說「加載」時,你的意思是該文件只下載一次,還是全局jQuery對象只實例化一次? – lxg 2014-10-08 22:45:17
'if(typeof jQuery =='undefined'){// jquery未加載,因此加載}' – adaam 2014-10-08 22:45:50
Plain JS不支持require_once。 HTML也沒有。你必須確保它是@adaam所說的 - 它也是C頭文件中使用的技術。 – 2014-10-08 22:47:42