在CDN关闭时加载jQuery的备份副本

我在用于初始化所有应用程序的脚本中有这个代码,它从谷歌CDN加载jQuery以及我们所有应用程序所需的其他几个东西。 然后,当我们加载特定的程序function时,我们检查以确保加载了jquery,以防CDN关闭。 我遇到的问题是它仍在加载第二个。 如果我添加一个简单的alert("Test"); 在行headTag.appendChild(jqTag); 它工作得很好,但如果我删除警报它使用第二个。 是什么赋予了?

他们像这样加载:

   

初始化脚本:

 if(typeof jQuery=='undefined'){ var headTag = document.getElementsByTagName("head")[0]; var jqTag = document.createElement('script'); jqTag.type = 'text/javascript'; jqTag.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'; headTag.appendChild(jqTag); } 

然后在另一个脚本中我们有以下内容:

 if(typeof jQuery=='undefined'){ var header = document.getElementsByTagName("head")[0]; var qtag = document.createElement('script'); qtag.type = 'text/javascript'; qtag.src = 'http://feedback.oursite.com/scripts/jquery-1.8.3.min.js'; qtag.onload = checkjQueryUI; header.appendChild(qtag); } else { jQCode(); } jQCode() { ... } 

这是HTML5 Boilerplate使用的技术。 首先,它加载Google CDN脚本,然后立即检查全局jQuery对象是否存在 – 如果不存在,则CDN失败并加载本地副本。

   

您的备用代码异步加载jQuery。
这意味着其余的脚本在jQuery加载之前运行。

添加alert()调用会强制其余代码等待(直到单击OK); 到那时,jQuery将被加载。

相反,您可以使用document.write()发出新的标记以同步加载它。

或者,您可以将其余代码包装在回调中,并在加载jQuery后调用回调。
如果你这样做,你应该使用一个脚本加载器库,它将为你处理所有这些。