2012-07-20 80 views
5

我想使用Head JS来为我的页面动态加载所有其他脚本。我打算使用由CDNJS托管的版本来利用更好的缓存,减少的延迟等优势。如何使用本地回退加载JavaScript中的本地回退

我没有理由认为CDNJS会去任何地方,但即使对于像谷歌CDN托管的文件,如jQuery,我喜欢包括后备。但是,当我使用jQuery时,这些文件包含在<body>标记的末尾。由于Head JS的性质,我需要将其包含在我的页面的<head>中。

<body>我会用两行这样的:

<script src="http://cdnjs.cloudflare.com/ajax/libs/headjs/0.96/head.min.js"></script> 
<script> window.head || document.write('<script src="js/libs/head-0.96.min.js"><\/script>') </script> 

我可以使用相同的套系在头上作为备用? document.write()会不会覆盖我的整个页面?由于浏览器解析DOM的顺序,当脚本存在于<head>中时,脚本加载的方式不同吗?

我对这个还很新,所以任何指导都会非常有帮助!谢谢!

+1

document.write只会在完成页面加载后尝试完成后破坏文档。一个内嵌的document.write将作为页面的加载/解析执行,只需将写入的数据原样插入到文档中即可。 – 2012-07-20 17:07:49

+0

是的,但是不会在头文件中加载调用'中的_before_脚本,该脚本是从document.write中加载的? – stevenem 2012-07-20 17:55:33

+0

只有当您将以前的脚本标记标记为'async'时。否则,脚本会同步加载。 – 2012-07-20 18:40:33

回答

0

正如你可能已经知道的,你将不会测试window.jQuery,但head.js中包含一些函数。

此外,你是对的,你可能不想在这里两次使用document.write()

代替document.write(),试试这个:

function appendScript(url) { 
    var head = document.getElementsByTagName('head')[0]; 
    var theScript = document.createElement('script'); 
    theScript.type = 'text/javascript'; 
    theScript.src = url; 
    theScript.onreadystatechange = callback; 
    theScript.onload = callback; 
    head.appendChild(theScript); 
} 

对于URL,使用本地备用。

+0

感谢您指出jQuery部分!我会给这个一杆!如何在Head JS加载后设置回调来运行'head.js()'命令? – stevenem 2012-07-20 19:08:36

+0

我不确定,我对head.js不甚了解,但我不知道是否可以保证这样做可以在head.js设计之前或之后运行。 – 2012-07-20 20:32:29