1

我有一个使用 jQuery 1.8 编写的 javascript 小部件,它加载到使用 jQuery 1.3 的客户端网站上。如果没有一些非常丑陋的黑客,我无法让 noConflict 在 IE 中正常工作。这是我的小部件呈现后页面的样子:

<html>
<head>
   <script type="text/javascript" src="http://code.jquery.com/jquery-1.3.min.js"></script>
</head>
<html>
<body>
   <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
   <script>
     $jq = $.noConflict();
   </script>
</body>
</html>

在 chrome 中,这很好用,$jq 被定义为 jQuery 1.8.3,但在 IE 8 中这不起作用,$jq 被定义为 jQuery 1.3。我的猜测是它的时间问题,脚本在新的 jQuery 加载之前被执行。我放入了一些回调定时器并且它可以工作,但我无法想象嵌入回调定时器是正确的方法。

有任何想法吗?

编辑

我不能命名 jQuery1.3,客户端在整个页面中使用它并且不想升级。

4

2 回答 2

0
<!-- load jQuery 1.5 -->
<script type="text/javascript" src="http://foo.com/jquery-1.5.js"></script>
<script type="text/javascript">
var jQuery_1_5 = $.noConflict(true);
</script>

<!-- load jQuery 1.6 -->
<script type="text/javascript" src="http://foo.com/jquery-1.6.js"></script>
<script type="text/javascript">
var jQuery_1_6 = $.noConflict(true);
</script>

在这种情况下 -

利用

jQuery_1_6(document).ready(function($) {
  // Code using $ as usual goes here.
});

代替

jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

见这里 - http://blog.nemikor.com/2009/10/03/using-multiple-versions-of-jquery/

于 2013-01-07T06:29:19.830 回答
0

我最终选择了LABjs,这是一个 javascript 加载器。这样我可以同步加载脚本并相应地在它们上执行代码:

<script>
   $LAB
   .script("framework.js").wait()
   .script("plugin.framework.js")
   .script("myplugin.framework.js")
   .wait(function(){
      myplugin.init();
      framework.init();
      framework.doSomething();
   });
</script>
于 2013-01-07T23:15:09.560 回答