在IE中异步加载jQuery时使用`.noConflict()`

时间:2013-04-16 10:53:35

标签: jquery internet-explorer

我有一个项目,我必须像这样动态加载jQuery:

(function() {

  var scriptOnLoad = function() {
    jQuery.noConflict();

    // Do my stuff here
  };

  var script = document.createElement('script');
  script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
  script.onload = scriptOnLoad;
  script.onreadystatechange = function () { 
  if ( script.readyState == 'loaded' || script.readyState == 'complete' ) 
    scriptOnLoad(); 
  };
  document.getElementsByTagName('head')[0].appendChild(script);
})();

该网站还使用Prototype,应使用.noConflict()覆盖。

然而在IE9中,有时会发生使用变量$的其他JS代码(不是我的,我无法控制它)失败,因为它仍然设置为jQuery而不是Prototype的功能。

我认为这是一个计时问题,并且IE在加载jQuery和执行readystatechange事件处理程序之间执行其他JavaScript。任何人都可以确认是否是这种情况吗?

这可能是什么解决方案?我唯一能想到的就是使用我自己修改的jQuery副本,它不会首先覆盖$

2 个答案:

答案 0 :(得分:0)

你可以连接jquery和jQuery.noConflict();在一个文件中加载它而不需要脚本加载处理程序。

答案 1 :(得分:-2)

不确定,但您可以尝试在$ j = jQuery.noConflict()等变量中初始化jquery,并使用$ j代码。