2013-01-15 52 views
0

我正在編寫一個小部件,並且依賴於jQuery,所以我需要使用noconflict以避免網站所有者也在運行jQuery的頁面出現問題。jQuery衝突(不在Chrome中)

我有這個至今:

(function() { 

    var js13; 

var script = document.createElement('script'); 
script.src = 'http://xxx.xxx.xxx.xxx:8080/socket.io/socket.io.js'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 

var script = document.createElement('script'); 
script.src = 'http://code.jquery.com/jquery-1.8.3.js'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 

var script = document.createElement('script'); 
script.src = 'http://code.jquery.com/ui/1.9.2/jquery-ui.js'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 
script.onload = scriptLoadHandler;  


function scriptLoadHandler() { 
    js13 = window.jQuery.noConflict(true); 

    main(); 

} 



/******** Main function ********/ 
function main() { 
    js13(document).ready(function ($) { 


    main widget code is here..... 

} // main 

})(); 

任何想法可能是錯誤的?我得到(Safari瀏覽器):

Type Issue 
'undefined' is not an object (evaluating 'window.jQuery.noConflict') 

需要它在所有的瀏覽器,不管是什麼的jQuery或其他腳本的網頁正在運行。

另一個問題是,http://xxx.xxx.xxx.xxx:8080/socket.io/socket.io.js並不總是加載..

我neeed,要休息負載

+0

關於這並不總是加載腳本:使用'$ .getScript'回調知道什麼時候(和如果)腳本被加載。 – Johan

+0

我會在哪裏放? – Elvin

+0

對不起,遲到了,我去參加了一個會議。但你可以用'.getScript('http://xxx.xxx.xxx.xxx:8080/socket.io/socket.io.js',function(){/ *腳本加載腳本替換動態生成的腳本* /})' – Johan

回答

0

這隻會回答你的問題的一個部分之前加載,但我可能不適合它到評論框。因此,關於劇本問題,一種可能的解決方案可能是:

$.ajax({ 
    url: 'http://xxx.xxx.xxx.xxx:8080/socket.io/socket.io.js', 
    dataType: 'script', 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     //couldn't load the script 
    }, 
    success:function(){ 
     //script has loaded, do stuff here 
    } 

});

一個可能的解決你的其他問題可以簡單地檢查是否已經jQuery的加載:

if(typeof jQuery !== 'undefined') 
    //jquery is loaded