js 檔案引入實現代碼_javascript技巧

來源:互聯網
上載者:User

也不好麻煩讓他們從新寫一個方法,由於他們都引用了這個AA.js檔案,想在這邊在AA.js後執行一個函數自動把jq庫引入,於是想到引入js檔案方法:

複製代碼 代碼如下:

getScript : function(s,call){
var el = UI.DC('script');
        if (call) {
            el.onload =el.onreadystatechange=call;
        }
        UI.A(el,'type','text/javascript');
        UI.A(el,'src',s);
        UI.GT(document,'head')[0].appendChild(el);
    }
/*UI.DC為建立對象,UI.A為屬性賦值,GT為getElementsByTagName的簡寫*/

於是這樣執行UI.getScript("js/jquery/jquery-1.4.2.min.js",function(){alert("載入成功")});

結果在IE和ff下確實彈出了載入成功,可當我再HTML中使用jq的時候在IE下怎麼都執行不了,不斷重新整理偶爾還能執行,放在伺服器上和在用戶端的靜態頁面也有差別,但在Firefox下沒有問題.........

於是想到是不是jq檔案在載入的時候和html載入是並行的,當jq載入成功之前HTML檔案已經執行,於是在html的body結束之時添加
複製代碼 代碼如下:

<script>
alert("html前執行")
</script>

執行發現確實是先彈出hmtl前執行,後彈出載入成功。在Firefox下也是這樣。上傳到伺服器上時感覺Firefox的彈出會同時出現.....

於是開始不解,到底怎麼設定才能確保jq檔案載入完之後才能執行html body中的東東,怎麼像在head中添加<script type="text/javascript" src="js/jquery.js"></script>那樣引入檔案..
思索總想到以前瀏覽一個頁面是他用了一個loading檔案引入許多js檔案,在html中就可使用這些引入的檔案函數,搜尋查到了這個js檔案內容為:

複製代碼 代碼如下:

var Collapsar = {
Version: '0.0.1',
require: function(libraryName) {
// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
},
load: function() {
if((typeof Prototype=='undefined') ||
(typeof Element == 'undefined') ||
(typeof Element.Methods=='undefined') ||
parseFloat(Prototype.Version.split(".")[0] + "." +
Prototype.Version.split(".")[1]) < 1.5)
throw("The Prototype JavaScript framework 1.5.0+ is required");

$A(document.getElementsByTagName("script")).findAll( function(s) {
return (s.src && s.src.match(/loader\.js(\?.*)?$/))
}).each( function(s) {
var path = s.src.replace(/loader\.js(\?.*)?$/,'');
var includes = s.src.match(/\?.*load=([a-z,]*)/);
(includes ? includes[1] : "").split(',').each(
function(include) {
Collapsar.require(path+include+'.js') });
});
}
}
Collapsar.load();


調用的時候為<script type="text/javascript" src="js/loder.js?load=jquery,...,..."></script>這樣等號後面的檔案都可引入,其實是這句在關鍵的作用 document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
剛看到有些疑惑write方法不是像文檔內新增內容嗎,內容應該在body標籤中出現啊,實驗發現如果是字串確實出現在文檔內,當如是script link等標籤就出現在了head內;那在head中添加引用js檔案難道和直接在head中一樣載入他們之後才執行body中的內容....他載入和上面添加script有什麼區別啊........

實驗:在AA.js中添加:

UI.getsc=(function(){
document.write('<script type="text/javascript" src="js/jquery/jquery-1.4.2.min.js"></script>');
})()

讓他自動執行,在body的第一行就引入jq的方法,實驗確實成功了,在IE和在ff一樣都可執行;
有時間繼續實驗...................

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.