Pregunta

¿Hay alguna forma de verificar si un complemento en particular está disponible?

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

Por ejemplo, quiero que el complemento de validación de jQuery use la biblioteca dateJS para comprobar si una fecha determinada es válida. ¿Cuál sería la mejor manera de detectar, en el complemento jQuery Valdation, si la fecha JS estuviera disponible?

¿Fue útil?

Solución

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

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

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

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

Pero es posible que tenga problemas donde la API se solape con la API nativa de Date.

Otros consejos

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

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

O como se garantiza que cada complemento tiene un valor que es igual a verdadero, puedes usar el más corto

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

Por cierto, el $ y jQuery son intercambiables, como lo demuestra la envoltura de aspecto extraño alrededor de un complemento:

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

el cierre

(function($) {
    //
})

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

(jQuery)

el $ en el cierre se establece igual a jQuery

Para detectar los complementos de jQuery, me pareció más preciso utilizar 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)

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/

Le recomendaría 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 cazar dependencias.

Dicho esto, por razones legales, es posible que no siempre puedas agrupar todo. Tampoco está de más ser cauteloso y comprobar la existencia del complemento mediante la la respuesta de Eran Galperin .

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

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

Si el complemento existe, se imprimirá " bonjour " Como respuesta en tu 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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top