¿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?

En términos generales, los complementos de jQuery son espacios de nombres en el scope 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.

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

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

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

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) 

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.

Este tipo de enfoque debería funcionar.

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

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. Además, nunca está de más ser cauteloso y verificar la existencia del complemento utilizando la respuesta de Eran Galperin .

jQuery tiene un método para verificar si algo es una función

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

Referencia de API: https://api.jquery.com/jQuery.isFunction/