2011-10-30 61 views
0

我嘗試動態加載一些js文件,例如:如何加載JavaScript的動態

function openInforWindow(){ 
    //check if the InforWinow.js has been loaded or not 
    if(window.InforWindow){ 
    //do the right thing 
    } 
    else { 
    loadJs('xxxxxx/InforWindow.js'); 
    // do the right thing 
    //but here ,the infowindow is not definded yet. 
    } 
} 

function loadJs(filename){ 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
    if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

如何確保在JS的增值經銷商或功能,這是動態加載,可以添加到JavaScript腳本中執行環境,所以我可以使用它們?

+0

你在哪裏使用參數「文件名」? 「js」應該是我想要的文件名。 在行 fileref.setAttribute(「src」,filename); – Birey

+0

我的錯過咒語,我很難修復它。 – hguser

+0

你仍然認爲它錯了,即它仍然在雙引號內,這使得它不是一個變量。 – Birey

回答

1

添加一個腳本元素不是一個阻塞操作,這意味着當你的外部腳本沒有被加載(或解釋)時,你的loadJs方法立即返回。你必須等待它加載。

function openInforWindow(){ 
    //check if the InforWinow.js has been loaded or not 
    if(window.InforWindow){ 
    //do the right thing 
    } 
    else { 
    var loadHandler = function() { 
     //do stuff with inforWindow 
    }; 

    loadJs('xxxxxx/InforWindow.js', loadHandler); 

    } 
} 

function loadJs(filename, handler){ 
    var fileref=document.createElement('script'); 
    fileref.setAttribute("type","text/javascript"); 
    fileref.setAttribute("src", "js"); 
    fileref.onreadystatechange = function() { 
    if (this.readyState == 'complete')handler(); 
    }; 
    fileref.onload = handler; 
    if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref); 
} 
0

可以動態插入<script/>標籤插入到文檔中,這裏是一個腳本,將在Firefox/Chrome瀏覽器,你可能需要一點點在IE中調整的:

loadJs = function(src) { 
    var script = document.createElement('SCRIPT'); 
    script.setAttribute('src', src); 
    document.getElementsByTagName('HEAD')[0].appendChild(script); 
} 

然後等待document.onload事件發射時,您的window.InforWindow應在該階段加載。

document.addEventListener('load', function() { 
    // Your logic that uses window.InforWindow goes here 
}, false); 

需要注意的是IE瀏覽器加載事件偵聽器稍有不同:

document.attachEvent('onload', function() { 
    // Your logic that uses window.InforWindow goes here 
}); 
0

一種方法可以加載使用jQuery的AJAX加載程序的腳本。下面的示例:

function loadJs(filename, functionToCall){ 
    $.getScript(filename, functionToCall); 
} 

現在,你只需要調用loadJs("script.js", callback);,它會首先完全載入的script.js,然後運行回調()。

+0

當然,在本例中你並不需要loadJs包裝器。只有使用$ .getScript()函數才能實現等效功能。 – Crossdiver