动态加载jQuery和扩展

Max*_*ios 6 javascript jquery jquery-ui jquery-plugins

我正在尝试封装我使用jQuery,jQuery UI,jQuery Form和xmlDom构建的javascript.

我希望能够向我的客户端发送一个引用其他javascript的javascript,包括一小段用于选项设置的js.

在下面找一个例子:

<script language="javascript">
var myOptions = {
   shop: 1,
   style: "gold"
}
load();
</script>
<script src="http://myServer/myScript.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

我几乎不可能动态加载jQuery和插件.我读了很多例子,当我动态加载它时,jQuery工作正常,但其余的扩展从未正常工作.以下序列是加载至少几个插件的唯一序列:

设置一个动态加载jQuery的加载函数:

load = function() {
    load.getScript(url_base + "/js/jquery-1.3.2.js");
    load.tryReady(0); 
}
load.getScript = function(filename) {
  var script = document.createElement('script')
  script.setAttribute("type","text/javascript")
  script.setAttribute("src", filename)
  if (typeof script!="undefined")
  document.getElementsByTagName("head")[0].appendChild(script)
}
load.tryReady = function(time_elapsed) {
  // Continually polls to see if jQuery is loaded.
  if (typeof $ == "undefined") { // if jQuery isn't loaded yet...
    if (time_elapsed <= 5000) { // and we havn't given up trying...
      setTimeout("load.tryReady(" + (time_elapsed + 200) + ")", 200); // set a timer to check again in 200 ms.
    } else {
      alert("Timed out while loading jQuery.")
    }
  } else {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

之后加载每个插件,jQueryForm,jQuery UI,xmlDom

当我检查jQuery表单时,它可用:

if (jQuery().ajaxForm)
Run Code Online (Sandbox Code Playgroud)

当我检查xmlDom它工作.

当我检查jQuery UI时,它永远不可用.

if(jQuery().ui)
Run Code Online (Sandbox Code Playgroud)

如果我设置等待UI的超时并不重要,它永远不会被加载.似乎是jQuery在加载之前执行我的UI功能.

任何人都可以给我一个链接来帮助解决这个问题吗?

elo*_*0ka 7

也许,这可能会有所帮助.来自dive.into.javascript网站:

SidJS是一个轻量级JavaScript库,用于按需加载JavaScript脚本和CSS样式表.它通过在需要时加载资源来提高AJAX应用程序的性能.

通过Google Closure Compiler缩小,它的重量为1.12KB(GZipped时为625字节).

如果你绝对不能包含另一个javascript库,你可以看看代码(真的没有太多的代码); 有了这些想法,你应该能够修复你的脚本.

编辑
如果您使用Google Closure Compiler缩小脚本,则需要添加该node.sheet.cssRules行.它似乎在Gecko和Webkit浏览器中使用,以测试是否已完全下载延迟加载的样式表(当然,如果您不是延迟加载样式表,则可以完全删除该部分).


小智 3

正如 Python 之禅所说:“简单胜于复杂”。所有这些超时混乱值得吗?正如我所假设的,浏览器必须以任何方式加载所有 js 库(以执行“myScript.js”文件),所以“正常”包含它们不是更容易吗?