Domanda

Esiste un modo per verificare se un determinato plug-in è disponibile?

Immagina di sviluppare un plugin che dipende dal caricamento di un altro plugin.

Ad esempio, desidero che il plug-in di convalida jQuery utilizzi la libreria dateJS per verificare se una determinata data è valida. Quale sarebbe il modo migliore per rilevare, nel plugin jQuery Valdation se la dateJS fosse disponibile?

È stato utile?

Soluzione

In generale, i plugin jQuery sono spazi dei nomi nell'ambito jQuery. È possibile eseguire un semplice controllo per vedere se lo spazio dei nomi esiste:

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

dateJs tuttavia non è un plugin jQuery. Modifica / estende l'oggetto data javascript e non viene aggiunto come spazio dei nomi jQuery. Puoi verificare se esiste il metodo di cui hai bisogno, ad esempio:

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

Ma potresti riscontrare problemi in cui l'API si sovrappone all'API Date nativa.

Altri suggerimenti

Se stiamo parlando di un corretto plugin jQuery (che estende lo spazio dei nomi fn), il modo corretto per rilevare il plugin sarebbe:

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

O poiché è praticamente garantito che ogni plug-in abbia un valore equivalente a true, è possibile utilizzare il più breve

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

A proposito, $ e jQuery sono intercambiabili, come dimostra il wrapper dall'aspetto strano attorno a un plugin:

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

la chiusura

(function($) {
    //
})

è immediatamente seguito da una chiamata a quella chiusura che "passa" jQuery come parametro

(jQuery)

$ nella chiusura è impostato uguale a jQuery

Per rilevare i plugin jQuery ho trovato più accurato usare le parentesi:

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

per i plugin che non usano lo spazio dei nomi fn (ad esempio pnotify), questo funziona:

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

Questo non funziona:

if($.fn.pluginname)

jQuery ha un metodo per verificare se qualcosa è una funzione

if ($.isFunction($.fn.dateJS)) {
    //your code using the plugin
}

Riferimento API: https://api.jquery.com/jQuery.isFunction/

Consiglio vivamente di raggruppare la libreria DateJS con il plug-in e documentare il fatto di averlo fatto. Niente è più frustrante del dover dare la caccia alle dipendenze.

Detto questo, per motivi legali, potresti non essere sempre in grado di raggruppare tutto. Inoltre, non fa mai male essere cauti e verificare l'esistenza del plugin usando la risposta di Eran Galperin .

Eseguilo nella console del browser che preferisci.

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

Se il plug-in esiste, verrà stampato " bonjour " come risposta nella tua console.

Questo tipo di approccio dovrebbe funzionare.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top