2013-03-05 95 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库。