Come posso verificare se è caricato un plugin jQuery?


221

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

Immagina di sviluppare un plug-in che dipende dal caricamento di un altro plug-in.

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?



Risposte:


364

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

 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. È possibile verificare se esiste il metodo necessario, ad esempio:

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

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


63
if (jQuery.fn.pluginName) {...} è un'altra opzione
Nagyman,

6
Forse un po 'eccessivo, ma if ($.isFunction(jQuery.fn.pluginName)) { ... }assicurerà anche che sia almeno una funzione.
Noyo,

ho una funzione che carica lo script, `LoadScript (posizione, namespcae, callBack)`, la funzione di callback è deformata in un intervallo, significa che fino a quando lo spazio dei nomi, cioè window.jQuerynon è impostato, il callback non verrà eseguito, funziona bene ma ora sto cercando di carica un plug-in di query e per verificarlo, devo chiamare jquery select come una funzione jQuery().pluginName, ma quando lo passo il mio parametro di funzione come LoadScript("jquery+plugin.js",jquery().plugin)jquery () non esiste ancora
Hassan Nisar Khan

97

Se stiamo parlando di un plug-in jQuery corretto (uno che estende lo spazio dei nomi fn), il modo corretto per rilevare il plug-in 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 "passaggio" jQuery come parametro

(jQuery)

$ nella chiusura è impostato uguale a jQuery


2
Ho fatto una funzionefunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
Il primo esempio dovrebbe essereif(typeof $.fn.pluginname != 'undefined')
dop il

1
@dops è corretto e ho modificato la risposta di conseguenza, anche se ho usato una tripla negata anziché una doppia uguale per confrontare sia il tipo che il valore.
pwdst,

1
$e jQuerynon sono sempre intercambiabili, poiché jQuery può essere caricato (come in WordPress) in modalità senza conflitti . Questo mi ha portato a usare sempre il documento stenografico, pronto per i conflitti jQuery(function($) { // $ is safe in here.... });, o, come dici tu, lo schema di chiusura:, a (function($) { // $ is safe in here.... })(jQuery);seconda del mio umore / necessità. (A proposito, votato, come il controllo che mi consiglia è quello che preferisco)
random_user_name

11

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

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

8

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)

Grazie. Un altro esempio - plugin Jquery Cookie
ymakux


1

Consiglio vivamente di raggruppare la libreria DateJS con il plug-in e documentare il fatto di averlo fatto. Niente è più frustrante di 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 .


1

Esegui questo nella tua console del browser di scelta.

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

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


-1

Questo tipo di approccio dovrebbe funzionare.

var plugin_exists = true;

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

6
Quasi tentato di sottovalutare per aver catturato ciò che puoi (e dovresti) facilmente rilevare
pwdst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.