2012-06-19 49 views
2

我正在一個平臺內工作我沒有服務器端訪問。這意味着我無法直接將javascript文件加載到頭部,只能加載正文。jQuery插件之前加載jQuery

以下是我做我的負荷:

function loadjscssfile(filename, filetype){ 
//http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml 
    if (filetype=="js"){ //if filename is a external JavaScript file 
     var fileref=document.createElement('script') 
     fileref.setAttribute("type","text/javascript") 
     fileref.setAttribute("src", filename) 
    } 
    else if (filetype=="css"){ //if filename is an external CSS file 
     var fileref=document.createElement("link") 
     fileref.setAttribute("rel", "stylesheet") 
     fileref.setAttribute("type", "text/css") 
     fileref.setAttribute("href", filename) 
    } 
    if (typeof fileref!="undefined") 
     document.getElementsByTagName("head")[0].appendChild(fileref) 
    } 
} 

loadjscssfile('https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js','js'); 
loadjscssfile('http://redacted.com/data.php?rand='+Math.random(),'js'); 
loadjscssfile('https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random(),'js'); 

然而,第三JavaScript文件(一個jQuery插件)我負載需要jQuery的。

當我加載頁面我得到這個錯誤(在Chrome)

Uncaught ReferenceError: jQuery is not defined 

我的傾向是,我的插件的jQuery之前加載。因爲如果我刷新頁面(當jQuery被緩存時),錯誤消失。但是,即使jQuery沒有被緩存,我也需要這個工作。思考?

+1

我想我發現類似的問題。請參閱:http://stackoverflow.com/questions/756382/bookmarklet-wait-until-javascript-is-loaded –

回答

1

這不是一個完美的解決方案,但它的作品總是對我說:複製/粘貼jquery.min.js的內容文件直接到你的HTML頁面

<script> ... </script> 
+0

它也阻止了jQuery的緩存,但至少它可以工作 – Tadeck

+0

哇,這實際上是一個很好的解決方案,謝謝! –

0

我要做的就是這個

if (typeof $ === 'undefined') { 
    document.write("<script src='//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'><\/script>"); 
    var timeout = 0; 
    while (typeof $ === 'undefined' && timeout++ < 100); 
} 

這將等到前轉移到做別的jQuery是加載。然後加載你的插件。

+0

請學習如何在StackOverflow上格式化您的代碼。 – Tadeck

+0

工作,謝謝。 –

+0

這與我過去所做的相似,但我希望有一個更清潔的解決方案。 –

0

當你想,你必須加載jQuery並在加載後運行其他腳本。要做到這一點,你可以使用加載器庫,如yepnopeheadjs,記住,因爲你不能把腳本放在你的頭上,你必須將加載器代碼放到腳本中。

您的代碼將是這樣的:

yepnope(// or head.js 
    'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', 
    'http://redacted.com/data.php?rand='+Math.random(), 
    'https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random() 
); 

另一件事你可以做的只是把對身體的jQuery腳本並加載其他腳本後:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script> 
    $.getScript('http://redacted.com/data.php?rand='+Math.random()); 
    $.getScript('https://raw.github.com/aakilfernandes/jquery.inject/master/jquery.inject.js?rand='+Math.random()); 
</script>