2011-06-03 87 views
0

理想情況下,我希望包含該插件的js文件也包括jquery庫。包含jQuery庫的jQuery插件文件

我打了幾個機制都沒有成功,XHR腳本注入基本的腳本注入,如:

myplugin.js:

var scriptElem = document.createElement('script'); 
scriptElem.src = 'jquery-1.6.1.js'; 
document.getElementsByTagName('head')[0].appendChild(scriptElem); 

(function() { 
    jQuery.fn.myplugin = function() { 
     ... 
    } 
})(); 

當然jQuery的的不會是及時定義。

有什麼建議嗎?

回答

0

將jquery庫複製到與插件相同的文件的頂部?

請注意,如果你採取了這個(不推薦的方法),你應該使用noConflict並將一些個人變量分配給jquery引用,例如。

var $myjQuery = jQuery.noConflict(); 

,並使用你的插件本參考,而不是僅僅$或jQuery的

+0

其實我忘了指出我需要單獨的jquery庫(爲了便於完整性檢查)。 – jontyc 2011-06-03 10:46:38

3

,你不應該在你的插件的jQuery jQuery是一個要求或依賴於使用插件。你應該永不包括它在你的插件!如果包含它,這將強制用戶使用特定版本的jquery,甚至可能導致問題。

+0

它不會被包含在包含插件的文件中,也不會被包含在插件代碼本身中。 – jontyc 2011-06-03 10:49:55

+0

相反,我希望強制用戶使用特定版本的jQuery,我的插件已經過測試的版本。如果客戶端已經使用舊版本的jquery,我不希望他們必須升級他們的jquery才能使用我的插件。我將處理jQuery的多個版本之間的衝突。 – jontyc 2011-06-03 11:02:58

+0

所以你認爲你可以預見未來的jQuery版本中會出現什麼樣的問題,你的用戶包括我的用戶? – mcgrailm 2011-06-03 11:07:48

4

我不確定這是否是最佳做法,我會親自離開jQuery包含開發人員使用我的插件。

但如果你堅持... :)

你應該用2個文件,一個是你的插件,其他的將只是一個裝載機:

myplugin_loader.js

var scriptElem; 

if(!window.jQuery){ 
    // Include jQuery if it's not already loaded 
    scriptElem = document.createElement('script'); 
    scriptElem.src = 'jquery-1.6.1.js'; 
    scriptElem.type = 'text/javascript'; 
    document.getElementsByTagName('head')[0].appendChild(scriptElem); 
} 

// Include the main plugin after jQuery 
scriptElem = document.createElement('script'); 
scriptElem.src = 'myplugin.js'; 
scriptElem.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(scriptElem); 

myplugin.js

(function() { 
    jQuery.fn.myplugin = function() { 
     ... 
    } 
})(); 

如果jQuery是肯定加載,你可以使用myplugin.js,如有疑問,請包括myplugin_loader.js。雖然如我所說,我會建議反對它。

+0

我通常認爲,如果有什麼是不好的做法,那麼我建議不要這樣做,並解釋原因。我儘量不提供可能被認爲是「不良做法」的建議 – mcgrailm 2011-06-03 10:50:24

+2

@mcgrailm - 有時你只需要抓住你的鼻子並使其工作。如果你知道爲什麼某些事情是不好的做法,那麼你應該解釋問題是什麼,什麼時候應用以及如何以及如何減少這些問題 - 然後編碼人員可以進行有教育的風險評估。如果我們都拒絕遵守最佳做法以外的任何事情,我很確定我們中的很多人會在太久之前失業!根據我的經驗,管理層往往很不耐煩! – BonyT 2011-06-03 11:01:20

+0

我認爲那看起來不錯DarthJDG,我會玩。 – jontyc 2011-06-03 11:09:16