2016-02-19 65 views
1

我想推遲加載一個外部的Javascript文件,直到頁面已經加載(如果這些外部資源無法加載,我也不想阻止渲染)。所以,我有這條線如何在加載延遲Javascript外部文件後才執行Javascript?

<script type="text/javascript" src=「//external.otherdomain.com/path/js/myresoures.js" defer></script> 

然而,當這個文件沒有最終加載,我想運行下面...

<script type="text/javascript">_satellite.pageBottom();</script> 

但由於是,上述可能的腳本加載之前運行。只有在遠程資源加載後,如何運行上述(或任何)Javascript?請記住,如果外部資源沒有加載(例如超時),我不想運行Javascript。

謝謝 - 戴夫

回答

0

這可以通過一個onload函數來實現。

您可以動態加載每個...此示例從MDN拉到右側。它會在您撥打importScript()的腳本上方插入您的外部資源,然後在加載後啓動回調。

sSrc =你的外部腳本,fOnload =回調

function importScript (sSrc, fOnload) { 
    var oScript = document.createElement("script"); 
    oScript.type = "text\/javascript"; 
    oScript.defer = true; 
    if (fOnload) { oScript.onload = fOnload; } 
     document.currentScript.parentNode.insertBefore(oScript, document.currentScript); 
    oScript.src = sSrc; 
} 

用法:

importScript("//external.otherdomain.com/path/js/myresoures.js", function() { _satellite.pageBottom(); }); 

或者,如果jQuery是一個選項,使用.getScript()像這樣:

$.getScript("//external.otherdomain.com/path/js/myresoures.js", function() {_satellite.pageBottom();}); 

無論是這些選項可用於<script>在頁面末尾,摺疊,正如他們所說,確保整個DOM首先加載。

+0

jQuery的getScript不會將資源加載爲延遲。 – mac9416

0

如何回合,?: https://varvy.com/pagespeed/defer-loading-javascript.html

噢,我的身體已經沒有足夠的字符

+0

我也發現,但那篇文章是不一樣的。它解釋瞭如何在加載頁面時加載外部資源,但不介紹如何在外部資源加載後加載代碼(如果已加載)。如果您不同意,請張貼代碼。 – Dave