2016-04-12 40 views
2

是否有可能停止加載以下面的方式加載的JS文件,有沒有任何事件處理程序?如何中止腳本加載

function makeScript(url){  
    script = document.createElement("script"); 
    script.src = url; 
    //when this line is executed the script will be loaded by the browser 
    //is there an event where the below script loading can be stopped based                 
    //on some condition       
    document.head.appendChild(script); 
} 

我不想通過ajax調用加載腳本,因爲js文件沒有出現在Chrome調試器工具的sources選項卡下。有可能的解決方案,如使用//# sourceURL=dynamicScript.js,但我將不得不把這一行放在所有的js文件中。我不想編輯所有的js文件。如果修改本地化爲1個地方,那很好。

+0

根據不同的條件,是的,你可以;但是,如果條件與腳本的大小或內容有關,那麼您將不得不使用XMLHttpRequest來加載腳本。如果是這樣,那麼我可以爲你提供一個很好的答案。 – argon

+0

假設有2個鏈接,點擊每個鏈接使用'makeScript()'加載js文件。如果用戶點擊第一個鏈接並快速點擊第二個鏈接,我想中止加載第一個鏈接的js文件。如果js文件的加載沒有停止,那麼腳本中可能存在TypeErrors,因爲當單擊另一個鏈接時,第一個鏈接的變量將被刪除,將由加載腳本使用。由於無法找到這些變量,因此會出現TypeError。 – Mumzee

回答

0

根據該意見,嘗試這樣的事情:

function makeScript(url) 
{ 
    script = document.createElement("script"); 

    script.onload = function() 
    { 
     if (!this.abort) 
     { 
      document.head.appendChild(script); 
      return; 
     } 
    }; 

    script.src = url; 

    return script; 
} 

您可以使用它像這樣:

var js1 = makeScript('path/to/file.js'); 

js.abort = true; // will not run 

因此,基本上,所有你需要做的是的onclick - >運行功能這相應地觸發了上面的JavaScript;可能會創建一個保存最後一次腳本加載的對象,並讓「onclick」將makeScript返回元素分配給該對象,以便替換或刪除該對象。

+0

'script.onload'不會被執行。腳本必須被加載,然後只有onload才能被觸發。 – Mumzee

1

您的意見後

假設有2個鏈接,點擊每一個環節上的負載使用makeScript()的js文件。如果第一個鏈接,用戶點擊並迅速點擊第二個鏈接,我想中止加載第一個鏈接的js文件。如果js文件的加載沒有停止,那麼腳本中可能存在TypeErrors,因爲當單擊另一個鏈接時,第一個鏈接的變量將被刪除,將由加載腳本使用。

這裏是我的作品的想法

您可以維護一個全局變量將舉行要加載的腳本。根據此變量,您可以執行document.head.appendChild(script);代碼行。

示例代碼

var scriptFilesConfig; //make this global scope variable 

,並在各個環節的點擊分配此網址到全局變量。

因此,可以說,你點擊第一個鏈接,那麼變量將

scriptFilesConfig = "firstscript.js"; 

好了,現在我立即點擊了第二個鏈接,那麼你必須指定這個網址的變量。所以現在你的對象會像。

scriptFilesConfig = "secondScript.js"; 

現在在任何時候你會執行document.head.appendChild(script);只有在腳本的URL與全球vairable匹配。

所以,你的代碼會像

function makeScript(url){  
    script = document.createElement("script"); 
    script.src = url; 
    if(url === scriptFilesConfig){ // append it only if the urls match. 
    document.head.appendChild(script); 
    } 
}  
+0

有時會發生什麼是'document.head.appendChild(腳本);'會被執行,但在它完成之前,將會單擊另一個鏈接 - >第一個鏈接的變量將被刪除,最後當腳本準備好執行時。 。會出現腳本錯誤。應該發生的是,點擊第二個鏈接時,加載腳本的請求應該被取消。 – Mumzee

+0

也許使用到目前爲止提供的答案的組合。請記住提高有用的和相關的答案,因爲如果他們看到這樣的小費,這也會激勵他人回答。 – argon

+0

@Mumzee一旦執行'document.head.appendChild(script);'你可以禁用所有其他的鏈接嗎? –