-3

我有一个项目,我必须像这样动态加载 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 副本,它$一开始就不会覆盖。

4

2 回答 2

0

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

于 2014-01-06T18:22:24.733 回答
-2

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

于 2013-04-16T11:13:13.900 回答