如果没有加载,从外部源加载jQuery

从源码加载jQuery

我喜欢做的是删除我的本地jquery.js并将其托管在其他地方。 但是,如果谷歌垮台怎么办? 因此,如果jQuery“仍未”加载,那么让我们编写一个使用其他源代码的回退…

我做了这个测试用例,但它似乎不起作用,也许有人可以帮助我:

http://jsfiddle.net/RBz4n

这非常有效(来自HTML5 Boilerplate ):

   

这是一个纯粹的JavaScript解决方案,首先检测jQuery是否可用。 如果没有,它会尝试CDN版本。 如果没有,它会尝试本地版本。 处理404错误。 我在一个不知道网站是否包含jQuery的解决方案中使用它。

  

您的脚本的问题是您在测试是否已加载jQuery之前不等待加载脚本。 使用这样的东西:

 function loadScript(src, callback) { var head=document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.onreadystatechange = function () { if (this.readyState == 'complete' || this.readyState == 'loaded') { callback(); } } script.onload = callback; script.src = src; head.appendChild(script); } function isjQueryLoaded() { return (typeof jQuery !== 'undefined'); } function tryLoadChain() { var chain = arguments; if (!isjQueryLoaded()) { if (chain.length) { loadScript( chain[0], function() { tryLoadChain.apply(this, Array.prototype.slice.call(chain, 1)); } ); } else { alert('not loaded!'); } } else { alert('loaded!'); } } tryLoadChain( 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', 'http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.4.min.js', 'mine.js'); 

问题

如果您使用Firebug并查看jQuery加载的位置,您可以看到Google已成功加载它。 为什么它似乎不起作用? 因为请求是异步的,并且当脚本同步运行时,它会在第一个脚本加载之前执行所有步骤。

所以:

  1. jQuery不存在。
  2. 添加SCRIPT元素以从Google加载(浏览器发送请求并继续执行脚本)
  3. jQuery不存在添加另一个来源

等等

你应该做的是附加脚本加载元素的onLoad事件,并在加载后检查jQuery。

与将请求发送到互联网上的某个服务器并将结果返回处理相比,脚本执行闪电般快速。

补充说明

正如我所读到的那样,使用这种技术检测404s时会遇到问题。 建议的方法是使用Ajax(XHR),然后附加脚本元素并将收到的内容添加到其中。 这将是为所有浏览器执行此操作的最可靠方式。

罗杰的回答很荒谬。 在这里,使用它代替它的2行。