2013-01-07 71 views
1

我有一個javascript小部件,我寫的使用jQuery 1.8加載在使用jQuery 1.3的客戶端網站上。沒有一些非常醜陋的黑客,我無法在IE中正常工作。這裏是頁面的樣子我的小部件之後被渲染:jQuery的多個版本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,客戶端使用它在整個頁面,不希望升級。

+1

像這樣的腳本按所有瀏覽器中遇到的順序執行。在任何版本的IE中,這種行爲都沒有什麼不同。必須有別的東西導致你的IE問題。 – jfriend00

+0

出於好奇而需要兩者的理由是什麼?你有一個不能在1.8上運行的插件嗎? 98%的方法應該向後兼容1.3 – charlietfl

+0

它不是我自己,客戶端不想改變他們的jQuery,以便使用我的小部件... – hb922

回答

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> 
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/

+0

這不適合我,請參閱我上面的編輯。 – hb922

+0

好的,讓我清楚一點。客戶端運行1.3版本,他們不會升級。但你的插件需要1.8,你的客戶端不需要1.8,所以你可以使用$或jquery這將調用1.3,你必須使用另一個實例名稱使用不同版本的jquery - - 這樣你就可以使用jq18,它會調用1.8版本。你的客戶端仍然可以使用$或jquery來調用1.3如果我錯了,請糾正我。並在你的插件中使用 - (function($){ ... })(jq18); – HADI

+0

或步驟1.加載Jquery 1.3.3庫 第2步。加載僅由Jquery 1.3.3支持的所有插件 第3步。對包含的Jquery運行noConflict命令。 $ jq133 = jQuery.noConflict(true); 第4步。包括Jquery 1.8.3庫 第5步包括Jquery 1.8.3需要和支持的所有插件步驟5.現在您可以使用舊版本的Jquery,使用$ jq133和新版本,使用$ – HADI