¿Cómo puedo verificar si se carga un complemento jQuery?

221

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

Imagine que está desarrollando un complemento que depende de la carga de otro complemento.

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 Valmentation si dateJS estuviera disponible?

Vitor Silva
fuente

Respuestas:

364

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 / extiende 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 en los que la API se superpone a la API de fecha nativa.

Eran Galperin
fuente
63
if (jQuery.fn.pluginName) {...} es otra opción
Nagyman
66
Tal vez un poco exagerado, pero if ($.isFunction(jQuery.fn.pluginName)) { ... }también asegurará que al menos sea una función.
Noyo
tengo una función que carga la secuencia de comandos, `LoadScript (ubicación, namespcae, callBack)`, la función de devolución de llamada se deforma bajo un intervalo, lo que significa que hasta que el espacio de nombres, window.jQueryes decir, no está configurado, la devolución de llamada no se ejecutará, funciona bien pero ahora estoy tratando de cargar el complemento de consulta aj y para verificar eso, necesito llamar a jquery select function como jQuery().pluginName, pero cuando lo paso mi parámetro de función como LoadScript("jquery+plugin.js",jquery().plugin)jquery () aún no existe la dosis
Hassan Nisar Khan
97

Si estamos hablando de un complemento jQuery adecuado (uno que extienda 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 tendrá un valor equivalente a verdadero, puede usar el más corto

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

Por cierto, $ y jQuery son intercambiables, como lo demuestra el contenedor 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

rmirabelle
fuente
2
Hice una funciónfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle
2
El primer ejemplo debería serif(typeof $.fn.pluginname != 'undefined')
dops
1
@dops es correcto y he editado la respuesta en consecuencia, aunque he usado una igualdad negada triple en lugar de doble igual para comparar tanto el tipo como el valor.
pwdst
1
$y jQueryno siempre son intercambiables, ya que jQuery puede cargarse (como en WordPress) en modo sin conflicto . Esto me ha llevado a utilizar siempre la taquigrafía preparada para documentos sin conflictos jQuery(function($) { // $ is safe in here.... });o, como usted señala, el patrón de cierre (function($) { // $ is safe in here.... })(jQuery);, según mi estado de ánimo / necesidad. (Por cierto, upvoted, ya que el cheque que recomienda es el que prefiero)
random_user_name
11

Para detectar los complementos de jQuery, encontré más preciso usar los corchetes:

if(jQuery().pluginName) {
    //run plugin dependent code
}
Suso Guez
fuente
8

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)
trante
fuente
Gracias. Otro ejemplo -
Complemento
1

Recomiendo encarecidamente que incluya 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. Tampoco hace daño ser cauteloso y verificar la existencia del complemento utilizando la respuesta de Eran Galperin .

Soviut
fuente
1

Ejecute esto en la consola de su elección.

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

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

Joshua Pekera
fuente
-1

Este tipo de enfoque debería funcionar.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
ceejayoz
fuente
66
Casi tentado a votar negativamente por atrapar lo que puede (y debería) detectar fácilmente
pwdst