2013-03-05 55 views
1

這是我在:加載jQuery的,如果沒有加載 - 沒辦法

<script src="myscript.js" type="text/javascript"></script> 
<script type="text/javascript">testfunction("hello");</script> 

內myscript.js:

if(!window.jQuery) 
{ 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = 'jquery-1.9.0.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

function testfunction(str) { 
    $(document).ready(function() { 
     alert(str); 
    }); 
} 

當然不需要對當前testfunction的jQuery,但它將需要。使用這種方法,jQuery被下載,但在調用testfunction()時未載入瀏覽器(Uncaught ReferenceError:$未定義)。

我能做的是在我的JS加載之前在不同的腳本中加載jQuery。在這種情況下,它會起作用,但我會有三種不同的腳本,而且我認爲這看起來不夠高雅。

有沒有其他辦法可以達到這個目的?

謝謝!

+2

只需先用jQuery添加腳本標籤,然後依賴jQuery的腳本,它應該在沒有任何欺騙的情況下開箱即用? – adeneo 2013-03-05 17:21:11

+0

只需添加腳本「正常」的方式。它比任何動態加載它都要優雅得多。 – JJJ 2013-03-05 17:22:34

+1

我不想爲用戶加載jQuery兩次(這是一個嵌入到另一個網頁的JS,這對我來說是失控的,這就是爲什麼我要檢查網頁是否強制用戶加載jQuery) 。 – Jonhas 2013-03-05 17:24:51

回答

0

用你的代碼,腳本將被異步加載。您需要向腳本標記添加一個onload事件,該事件將觸發依賴於jQuery的部件。

如果您希望腳本以同步的方式來加載,使用document.write

window.jQuery||document.write(unescape("%3Cscript src='"+jQueryURL+"' type='text/javascript'%3E%3C/script%3E")); 

document.write技術是很常見的,只要記住,你不能使用你的文件已加載後(或否則它會覆蓋整個頁面)。

如果您想要在更大規模上使用動態加載,請查看現有的加載器或AMD庫。