2012-05-23 13 views
5

Başta üstbilgi, altbilgi ve gövde görünümleri olan bir web uygulamasına sahibim. Web sitesi üzerinde, history.js kitaplığı ve HTML5 pushstate kullanarak çalışıyorum, ancak karşılaştığım sorunlardan biri javascript DOM'a eklendiğinde çalıştırılacak gömülü javascript elde ediliyor.AJAX yoluyla yüklenen DOM'de dinamik olarak enjekte edilen javascript'i çalıştırın (history.js ile web sitesi ajaxify))

Hemen hemen bütün javascript jQuery sarılır (function() {...}) (belge üzerinde hazır yükleyici)

herkes bu başa çıkmak için iyi bir strateji biliyor mu? Teşekkürler!

cevap

7

Seni anlıyorum, "sayfanız" sadece dinamik olarak yüklediğiniz HTML için bir kaptır. Bu HTML'de şu anda yürütmeyen JavaScript komut blokları var. Bu doğru mu? Sayfa komut dosyalarında mı yoksa yeni komut dosyalarına bağlantılar mı? How do you execute a dynamically loaded JavaScript block?

Kendi düşüncelerini: kapsayıcı inanılmaz geneldir ve bu yüzden JavaScript gerekebilir bilmiyor sürece

, en basit yaklaşım muhtemelen

Her durumda, ben bu sorunuza yanıt düşünüyorum Tüm JavaScript'inizi kapsayıcı sayfanıza manuel olarak eklemek, böylece kapsayıcıyla yüklenmesini, belki de tek bir dosyada küçültülmesi ve birleştirilmesi.

dinamik olarak komut dosyaları yüklemeye gerek, ama ne olduklarını biliyorsanız, .getScript() veya .ajax() kullanarak jQuery ile bunu yapabilirsiniz. Bu sayfanın güzel bir şey olduğunu düşündüm, http://www.electrictoolbox.com/jquery-dynamically-load-javascript-file/.

Aynı şekilde, html bloğunuzu aldıktan sonra gereken betiklerin hangileri olduğunu bilmiyorsanız, komut dizileri için html'yi ayrıştırabilir ve bunları sayfaya eklenen yeni komut dosyası öğeleri aracılığıyla el ile ekleyebilirsiniz. Örnek olarak, aşağıdaki betik zaten mevcut değilse, sayfaya jQuery ekler.

(function() { 

    if (typeof(jQuery) == "undefined") { 
     var headID = document.getElementsByTagName("head")[0];   
     var newScript = document.createElement('script'); 
     newScript.type = 'text/javascript'; 
     newScript.id = 'myjQuery'; 
     newScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'; 
     headID.appendChild(newScript); 
    } 

    window.addEventListener('load', function (e) { 

     //make jQuery calls here. 

    }, false); 

})(); 
+0

Ben sadece iyi bir cevap buldum ayarlayabilirsiniz : HTML'yi düz metin olarak döndürür, dahil edildiğinde komut dosyası etiketleri değerlendirilir DOM’ta toplandı. " Denemeye çalışacağım ama bu bana istediğim gibi geliyor :) –

+0

Kulağa hoş geliyor. İyi şanslar! – jatrim

-1

kullanım .on, Al o fonksiyonun ancak birkaç kelimeyle davranışlarını açıklamak için gidiş yok: Bir div size "onclick" bağlayan örneğin dom fokurdayan öğeleri arasında

eser http://api.jquery.com/jQuery.ajax/ dataType yapılandırma özelliği:: "" html" bazıları ya onun bütün çocuklarına x davranışa sahip

İlgili konular