2016-04-12 21 views
2

Aşağıdaki şekilde yüklenen JS dosyasının yüklenmesini durdurmak mümkün mü, herhangi bir olay işleyicisi var mı? js dosyası Krom Debugger Aracı kaynakları sekmesi altında görünmez olarakKomut dosyası yükleme nasıl iptal edilir

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); 
} 

Ben ajax çağrı yoluyla komut dosyası yüklemek istemiyoruz. //# sourceURL=dynamicScript.js kullanmak gibi olası çözümler var, ancak bu satırı tüm js dosyalarına koymam gerekecek. Tüm js dosyalarını düzenlemek istemiyorum. Değişiklik 1 yere lokalize ise bu iyidir. açıklamalara dayanarak

+0

gibi olurdu, evet, yapabilirsin; Ancak, koşulun komut dosyasının boyutu veya içeriği ile ilgisi varsa, komut dosyanızı yüklemek için XMLHttpRequest'i kullanmanız gerekir. Eğer durum buysa, sana iyi bir cevap verebilirim. – argon

+0

2 bağlantı olduğunu varsayalım, her bağlantıyı tıklamak js dosyasını 'makeScript()' kullanarak yükler.Kullanıcı ilk bağlantıya tıklarsa ve ikinci bağlantıyı hızlıca tıklarsa, ilk bağlantının js dosyasının yüklenmesini iptal etmek istiyorum. Js dosyasının yüklenmesi durmazsa, komut dosyasında TypeErrors olabilir, çünkü başka bir link tıklandığında, yükleme betiği tarafından kullanılacak ilk linkin değişkeni silinir. Bu değişkenleri bulamadığı için TypeError olacaktır. – Mumzee

cevap

0

, böyle bir şey deneyin:

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

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

    script.src = url; 

    return script; 
} 

Böyle kullanabilirsiniz:

Yani temelde, yapmanız gereken tüm onclick olduğunu
var js1 = makeScript('path/to/file.js'); 

js.abort = true; // will not run 

-> bir işlevi çalıştırmak yukarıdaki JavaScript'i buna göre tetikler; belki de son komut dosyasını yükleyen bir nesneyi hazırlayın ve "onclick" öğesi, değiştirilebileceği veya silinebileceği nesneye "onclick" öğesi atamalısınız. Yorumlarınızı sonra

+0

'script.onload' yürütülmeyecek. Komut dosyası yüklenmeli, ardından sadece yük atılabilir. – Mumzee

1

2 bağlantılar istediğim, hızlı kullanıcı ilk linke tıklama ve ikinci linke tıklarsa her linke tıklayarak. makeScript() kullanarak js dosyayı yükler vardır varsayalım ilk linkin js dosyasının yüklenmesini iptal etmek için. Js dosyasının yüklenmesi durmazsa, komut dosyasında TypeErrors olabilir, çünkü başka bir link tıklandığında, yükleme betiği tarafından kullanılacak ilk linkin değişkeni silinir.

Burada fikri

Senaryoda yüklenecek yapacak küresel bir değişkeni korumak benim parçasıdır. Bu değişkene bağlı olarak document.head.appendChild(script); kod satırını çalıştırabilirsiniz.

Örnek kod

var scriptFilesConfig; //make this global scope variable 

ve her bir bağlantının tıklama

küresel değişkeni içine bu url atayın.

Öyleyse değişkene bu url atamanız gerekir, o zaman değişken şimdi hemen ikinci linke tıklandığında

scriptFilesConfig = "firstscript.js"; 

Tamam olacağını ilk linke tıklandığında diyelim. Yani şimdi nesnen gibi olacak.

scriptFilesConfig = "secondScript.js"; 

Şimdi herhangi bir noktada komut dosyası url küresel vairable ile eşleşmesi durumunda document.head.appendChild(script); çalıştırır.

Yani kod durumuna bağlı

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

Bazen ne olacağı 'document.head.appendChild (script);' idam edilecek ama bitmeden başka bir link tıklanacak -> ilk linkin değişkeni silinecek ve son olarak betik çalışmaya hazır olduğunda. .o komut dosyası hatası olacak. Olması gereken, ikinci bağlantı tıklandığında komut dosyasını yüklemek isteğinin iptal edilmesi gerektiğidir. – Mumzee

+0

Belki de şu ana kadar verilen cevapların bir kombinasyonunu kullanın. Lütfen, yararlı ve alakalı cevapları yukarı çekmeyi unutmayın, çünkü bu şekilde armağan gösteriliyorsa başkalarının da cevap vermesini motive edecektir. – argon

+0

@Mumzee, "document.head.appendChild (script)" i çalıştırdığınızda, tüm diğer bağlantıları doğru olarak devre dışı bırakabilirsiniz. –