Bir jQuery eklentisinin yüklü olup olmadığını nasıl kontrol edebilirim?


221

Belirli bir eklentinin mevcut olup olmadığını kontrol etmenin herhangi bir yolu var mı?

Yüklenen başka bir eklentiye bağlı bir eklenti geliştirdiğinizi düşünün.

Örneğin, jQuery Validation eklentisinin belirli bir tarihin geçerli olup olmadığını denetlemek için dateJS kitaplığını kullanmasını istiyorum. DateJS mevcut olsaydı, jQuery Valdation eklentisinde tespit etmenin en iyi yolu ne olurdu?



Yanıtlar:


364

Genel olarak, jQuery eklentileri jQuery kapsamındaki ad alanlarıdır. Ad alanının var olup olmadığını görmek için basit bir kontrol çalıştırabilirsiniz:

 if(jQuery().pluginName) {
     //run plugin dependent code
 }

dateJs bir jQuery eklentisi değildir. Javascript tarih nesnesini değiştirir / genişletir ve jQuery ad alanı olarak eklenmez. İhtiyacınız olan yöntemin var olup olmadığını kontrol edebilirsiniz, örneğin:

 if(Date.today) {
      //Use the dateJS today() method
 }

Ancak, API'nın yerel Tarih API'sı ile çakıştığı durumlarda sorunlarla karşılaşabilirsiniz.


63
if (jQuery.fn.pluginName) {...} başka bir seçenektir
Nagyman

6
Belki biraz aşırıya kaçmak, ama if ($.isFunction(jQuery.fn.pluginName)) { ... }aynı zamanda en azından bir işlev olmasını sağlayacaktır.
Noyo

betiği yükleyen bir fonksiyonum var, `LoadScript (konum, namespcae, callBack)`, geri arama işlevi bir aralık altında çarpık, yani ad alanı yani window.jQuerygeri arama ayarlanana kadar anlamına gelir , iyi çalışıyor ama şimdi çalışıyor aj sorgusu eklentisini yükleyin ve bunu kontrol etmek için, jquery select işlevini çağırmak zorundayım jQuery().pluginName, ancak bunu LoadScript("jquery+plugin.js",jquery().plugin)geçtiğimde jquery () dozu gibi benim fonksiyon parametresi henüz mevcut değil
Hassan Nisar Khan

97

Uygun bir jQuery eklentisinden (fn ad alanını genişleten bir eklentiden) bahsediyorsak, eklentiyi tespit etmenin uygun yolu şöyle olacaktır:

if(typeof $.fn.pluginname !== 'undefined') { ... }

Veya her eklentinin gerçek değerine eşit bir değere sahip olduğu garanti edildiğinden, daha kısa olanı kullanabilirsiniz.

if ($.fn.pluginname) { ... }

BTW, $ ve jQuery değiştirilebilir, çünkü bir eklentinin etrafındaki garip görünümlü sarmalayıcı şunları gösterir:

(function($) {
    //
})(jQuery))

kapanış

(function($) {
    //
})

hemen parametre olarak "geçen" jQuery kapatma çağrısını izler

(jQuery)

kapatma $ $ jQuery eşit olarak ayarlanır


2
Bir işlev yaptımfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
İlk örnekif(typeof $.fn.pluginname != 'undefined')
dops

1
@ dops doğrudur ve hem tipi hem de değeri karşılaştırmak için çift eşittir yerine eşitlenmiş bir üçlü kullandığım halde, cevabı buna göre düzenledim.
pwdst

1
$ve jQueryolmayan her zaman jQuery (WordPress gibi) olabilir, birbirinin yüklü hiçbir çatışma modu . Bu, her zaman stenografi, çatışmaya karşı güvenli olmayan belgeyi hazır kullanmama neden oldu : jQuery(function($) { // $ is safe in here.... });veya belirttiğiniz gibi kapatma modeli: (function($) { // $ is safe in here.... })(jQuery);ruh halime / ihtiyacıma bağlı olarak. (BTW, öneriyorum, tavsiye ettiğiniz çek tercih ettiğim gibi)
random_user_name

11

JQuery eklentilerini tespit etmek için parantezleri kullanmak için daha doğru buldum:

if(jQuery().pluginName) {
    //run plugin dependent code
}

8

fn ad alanı kullanmayan eklentiler için (örneğin pnotify), bu işe yarar:

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}

Bu işe yaramaz:

if($.fn.pluginname)

Teşekkürler. Başka bir örnek - Jquery Cookie eklentisi
ymakux


1

DateJS kitaplığını eklentinizle paketlemenizi ve bunu yaptığınızı belgelemenizi şiddetle tavsiye ederim. Hiçbir şey bağımlılıkları avlamaktan daha sinir bozucu olamaz.

Bununla birlikte, yasal nedenlerden dolayı, her şeyi her zaman paketleyemeyebilirsiniz. Ayrıca, Eran Galperin'in cevabını kullanarak eklentinin varlığını kontrol etmek ve dikkatli olmak asla acıtmaz .


1

Bunu seçtiğiniz tarayıcı konsolunda çalıştırın.

if(jQuery().pluginName){console.log('bonjour');}

Eklenti varsa konsolunuzda yanıt olarak "bonjour" yazdıracaktır.


-1

Bu tür bir yaklaşım işe yaramalıdır.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}

6
Neredeyse kolayca tespit edebileceğiniz (ve yapmalısınız) yakalamak için aşağı oy için cazip
pwdst
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.