2012-07-12 16 views
0

下面的代碼運行在頁面上爲:事件當文件已加載

(function() { 
    function asyncLoad() { 
    var urls = ["https://something.com/script.js"]; 
    for (var i = 0; i < urls.length; i++) { 
     var s = document.createElement('script'); 
     s.type = 'text/javascript'; 
     s.async = true; 
     s.src = urls[i]; 
     var x = document.getElementsByTagName('script')[0]; 
     x.parentNode.insertBefore(s, x); 
    } 
    } 
    window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false); 
})(); 
//]]> 

我需要一個事件偵聽器,當此文件可在DOM是火災。

我需要使用此腳本中的變量。

我需要知道什麼時候https://something.com/script.js已被加載,如果不是,我想備份發射。如果文件未在指定的時間段內加載,則會發生這種情況。

另外,我可以使用事件的時候,從script.js文件中可用的變量。

回答

1

腳本元素支持加載事件,所以你應該在插入之前設置監聽器的腳本元素它在DOM中,例如

s.src = urls[i]; 

    s.onload = asyncLoad; // add load listener 

    var x = document.getElementsByTagName('script')[0]; 
    x.parentNode.insertBefore(s, x);  

如果你想知道它是否successfuly或沒有到達,使用XMLHttpRequest來獲取內容,然後將其分配到腳本元素的文本財產。通過這種方式,您可以知道腳本是否被撤回,在發生故障時設置超時並採取糾正措施,同時不鎖定瀏覽器。

1

如果您script.js例如具有功能:function a()那麼你可以捕捉時,它可以像這樣

var checkScript = function(){ 
    if (typeof a === "function"){ 
     //fire event 
    }else{ 
     setTimeout(checkScript, 1000); 
    } 
} 
checkScript(); 
+0

相似http://stackoverflow.com/questions/756382/bookmarklet-wait-until-javascript-is-loaded http://stackoverflow.com/questions/3955770/dynamically-include-javascript-and-wait – 2012-07-12 02:36:01