我認爲下面的問題涉及變量作用域,雖然我可能會誤解。變量作用域問題 - 引用外部JS文件中的變量
我創建了一個javascript書籤,它在網頁中插入一些外部JavaScript文件。對於這個書籤,我需要插入3個外部js文件。要插入這些文件,我使用了大約6種不同的功能,都非常相似。我試圖創建一個新函數來鞏固這些功能,但它一直失敗。我認爲它由於範圍可變的問題而失敗,但我可能弄錯了。
下面是工作中插入一種(3)外部的JS文件的代碼:
jQueryCheck();
function jQueryLoader() {
var jQ = document.createElement('script');
jQ.type = 'text/javascript';
jQ.onload = jQueryCheck;
jQ.src = 'http://example.com/jquery.js';
document.body.appendChild(jQ); //the jQuery variable get defined here
}
function jQueryCheck() {
if (typeof jQuery == 'undefined') {
jQueryLoader();
} else {
tableSorterLoader();
}
}
上面的代碼的工作原理,但我必須以插入3個獨立的外部運行幾乎相同的功能的3倍文件。我試圖鞏固碼成以下(這失敗):
var scripts = [];
scripts[0] = 'http://example.com/jquery.js';
scripts[1] = 'http://example.com/plugin2.js';
scripts[2] = 'http://example.com/plugin3.js';
jsLoader(scripts, mainFunction);
function jsLoader(file,nextFunction) {//nextFunction is the function that runs after jsLoader is finished
for (var i = 0; i <= scripts.length; i++) {
function insertScript() {
var js = document.createElement('script');
js.type = 'text/javascript';
js.onload = scriptCheck;
js.src = file[i];
document.body.appendChild(js);//the jQuery variable fails to get defined here
}
function scriptCheck() {
var variableTest = (typeof jQuery);
if (typeof jQuery == 'undefined') {
insertScript();
}
}
scriptCheck();
}
nextFunction();
}
我相信我孤立發生問題:document.body.appendChild(js);
後(見註釋)。在第一組函數中,jQuery變量在這行代碼中成功定義(因爲插入了jQuery庫)。但是,在第二個函數中,即使jQuery庫仍然被成功插入到網頁的html中,jQuery變量也沒有被定義。有必要驗證是否已定義jQuery,以便在jQuery處於活動狀態並可用之前,其餘代碼不會執行。
任何人都可以提出這個問題的原因以及解決方案?另外,任何人都可以建議改進我的新功能jsLoader()
,使其更加智能/專業?
我建議不要聲明嵌套函數。你可以在jsLoader主體之外聲明它們並使它們使用參數工作。 – 2011-05-16 15:17:52
如果我不得不猜測,那麼到您再次檢查時,jquery腳本並未完全加載(因此未被分析和可用)。幾年前,我寫了一個按需加載器,如果我沒有記錯,這是我遇到的一個問題。 – Fge 2011-05-16 15:20:42