<body>

2015-04-21 11 views
18

'un sonunda bir komut dosyası ekleme komut dosyası nasıl oluşturulur Bir istemci, yönetici aracılığıyla özel JS eklemenize izin veren Sharetribe'ı kullanıyor, ancak yalnızca kafanıza. Komutumun jQuery'den sonra yüklenmesini istiyorum, ancak jQuery, vücudun sonunda yüklenir. Doküman yüklendiğinde ana komutumu sonuna kadar ekleyen vanilya JS'yi nasıl yazabilirim?<body>

<script> 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://cdn..."; 
    document.body.appendChild(script); 

    var script2 = document.createElement("script"); 
    script2.type = "text/javascript"; 
    script2.text = "$(SOME.CODE.HERE);" 
    document.body.appendChild(script2); 
</script> 

Ama belge yükleme bitmeden infaz (ve özellikle de jQuery kullanılabilir hale getirilmeden önce) alır:

Bu çalıştı. Düşünebildiğim tek şey bir zamanlayıcı ayarlamak, ama bu araba gibi görünüyor.

Herhangi bir öneri?

+2

Kodunuzu window.onload içine kaydedemez misiniz? – Kalish

cevap

41

Kullanım DOMContentLoaded olay:

The DOMContentLoaded event is fired when the document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading (the load event can be used to detect a fully-loaded page).

document.addEventListener("DOMContentLoaded", function (event) { 
    console.log("DOM fully loaded and parsed"); 

    // Your code here 
}); 

DOMContentLoadedjQuery ait ready olay aynıdır. jQuery yüklenmesini Beklerken gibi

Documentation

+0

Şüpheli herhangi bir okuyucuya: En iyi uygulama, sayfanın fazladan bir komut dosyası içerecek şekilde yüklenmesini beklemek değil, bu betiği DOMContentLoaded dinleyicisine sarmalı ve ilk olarak yüklemelisiniz. – AsTeR

2

, sadece jQuery'nin $(document).ready() method sonunda kodunuzu sarabilirsiniz:

$(document).ready(function() { 
    // Your code here. 
}); 

A page can't be manipulated safely until the document is "ready." jQuery detects this state of readiness for you. Code included inside $(document).ready() will only run once the page Document Object Model (DOM) is ready for JavaScript code to execute.

Ben size bu istediğinizi belirttiniz ettik fark "vanilla" JS'de, jQuery'yi yüklemek için beklediğiniz gibi, bu zaten biraz gereksiz görünüyor.

window.onload = function() {   
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    //.... 
} 

Veya kullanarak jQuery:

+2

@Tushar Bunu okudum, ancak OP zaten jQuery'nin yüklenmesini bekliyorsa anlamsız görünüyor. JQuery'nin zaten sağlanmış olduğu kodu da kullanabilirsiniz. –

+4

@JamesDonnelly "Uncaught ReferenceError: $ tanımlı değil", çünkü jQuery sayfanın sonuna ekleniyor. –

+0

@PeterR bu kodu yerleştirmeniz gerekir * sonra * jQuery dosyanız eklenir ('head' elementinden sonra - yüklendiği yer - veya belgenizin 'body' kısmında). –

2

yükleme bitirmek için DOM beklemek kodunuzu söyle tarayıcı <head> kodunuzu çalıştırdığınızda

$(document).ready(function() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    //.... 
}); 
1

, <body> eleman var vermedi henüz. Yani, document.body, null idi.

, <body> eleman bir senaryo oluşturmak örneğin document ait 'yük' olay kullanmak için: dom elemanı başarıyla işlemek zaman

............. 
document.addEventListener('load', function(event){ 
    var script = document.createElement('script'); 
    ............... 
    document.body.appendChild(script); 
}, false); 
............ 
1

$(document).ready(){} yürütülür.

İlgili konular