Pregunta ¿Cómo puedo verificar si un plugin jQuery está cargado?


¿Hay alguna manera de verificar si un plugin en particular está disponible?

Imagine que está desarrollando un complemento que depende de otro complemento que se esté cargando.

Por ejemplo, quiero que el complemento jQuery Validation use la biblioteca dateJS para verificar si una fecha determinada es válida. ¿Cuál sería la mejor manera de detectar, en el complemento jQuery Valdation, si la fechaJS estaba disponible?


206
2017-12-30 17:26


origen


Respuestas:


En términos generales, los complementos de jQuery son espacios de nombres en el alcance de jQuery. Podría ejecutar una simple comprobación para ver si el espacio de nombres existe:

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

dateJs sin embargo no es un plugin jQuery. Modifica / amplía el objeto de fecha de javascript y no se agrega como un espacio de nombre jQuery. Puede verificar si el método que necesita existe, por ejemplo:

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

Pero es posible que se encuentre con problemas en los que la API se solapa con la API de fecha nativa.


327
2017-12-30 17:36



Si hablamos de un plugin jQuery adecuado (en el que se extiende el espacio de nombres fn), entonces la forma correcta de detectar el plugin sería:

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

O porque está bastante garantizado que cada complemento tenga algún valor que equivalga a verdadero, puede usar el más corto

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

Por cierto, $ y jQuery son intercambiables, ya que el envoltorio de aspecto extraño alrededor de un complemento demuestra:

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

el cierre

(function($) {
    //
})

es seguido inmediatamente por una llamada a ese cierre 'pasando' jQuery como el parámetro

(jQuery)

el $ en el cierre se establece igual a jQuery


86
2018-03-28 21:54



Para detectar los complementos de jQuery, me pareció más preciso usar los paréntesis:

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

11
2018-03-23 10:47



para los complementos que no usan el espacio de nombres fn (por ejemplo pnotify), esto funciona:

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

Esto no funciona:

if($.fn.pluginname)

9
2018-05-04 18:49



Ejecuta esto en la consola de tu navegador de elección.

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

Si el complemento existe, imprimirá "bonjour" como respuesta en su consola.


2
2018-06-13 18:42



Este tipo de enfoque debería funcionar.

var plugin_exists = true;

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

1
2017-12-30 17:35



Recomiendo encarecidamente que agrupe la biblioteca DateJS con su complemento y documente el hecho de que lo ha hecho. Nada es más frustrante que tener que buscar dependencias.

Dicho esto, por razones legales, es posible que no siempre puedas agrupar todo. También nunca está de más ser cauteloso y verificar la existencia del complemento usando La respuesta de Eran Galperin.


1
2017-12-31 08:34