2008-12-30 25 views
199

¿Hay alguna manera de verificar si un plugin en particular está disponible?¿Cómo puedo verificar si un complemento jQuery está cargado?

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?

+1

pregunta similar [? Cómo comprobar jQuery plugin y existe funciones] (http://stackoverflow.com/q/5339876/782535) –

+0

[Artículo detallado para verificar los complementos de jQuery o jQuery cargados o no] (http://conceptf1.blogspot.com/2013/11/jquery-library-loaded-or-not-validation.html) –

Respuesta

316

En general, los complementos jQuery son espacios de nombres en el ámbito de jQuery. Se podría ejecutar una sencilla comprobación para ver si existe el espacio de nombres:

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

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

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

Pero usted podría encontrarse con problemas en los que la API se superpone a la Fecha API nativa.

+54

if (jQuery.fn.pluginName) {...} es un Otra opción – Nagyman

+5

Tal vez un poco exagerado, pero 'if ($ .isFunction (jQuery.fn.pluginName)) {...}' también asegurará que sea al menos una función. – Noyo

+0

tengo una función que carga el script, 'LoadScript (location, namespcae, callBack)', la función de devolución de llamada está deformada en un intervalo, significa que hasta que el espacio de nombres, por ejemplo 'window.jQuery' no esté configurado, la devolución de llamada no se ejecutará, funciona bien, pero ahora estoy cargando un plugin de consulta y para verificar que, necesito llamar a la función jquery select como 'jQuery(). pluginName', pero cuando lo paso mi parámetro de función como' LoadScript ("jquery + plugin.js" , jquery(). plugin) 'jquery() dose not yet yet –

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; 
} 
+3

Casi tentado a vencer por atrapar lo que puede (y debería) detectar fácilmente – pwdst

1

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 pueda agrupar todo. También nunca está de más ser precavido y verificar la existencia del complemento usando Eran Galperin's answer.

11

Para detectar plugins jQuery que encontré más exacto utilizar los paréntesis:

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

Si estamos hablando de un plugin jQuery adecuada (que se extiende en el espacio de nombres fn), entonces la forma apropiada para detectar la plug-in sería:

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

O porque cada plugin está prácticamente garantizado para tener algún valor que equivale a verdad, se puede utilizar el más corto

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

Por cierto, el $ y jQuery son intercambiables, como el envoltorio de aspecto extraño alrededor de un plugin demuestra:

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

el cierre

(function($) { 
    // 
}) 

es seguida inmediatamente por una llamada a que el cierre 'que pasa 'jQuery como parámetro

(jQuery) 

el $ en el cierre se fija igual a jQuery

+2

Hice una función' function isPluginLoaded (complemento) {return !! $. fn [plugin]} ' – styfle

+2

El primer ejemplo debería ser' if (typeof $. fn.pluginname!= 'undefined') ' – dops

+1

@dops es correcto y he editado la respuesta en consecuencia, aunque utilicé una triple negada en lugar de la igualdad del doble para comparar el tipo y el valor. – pwdst

7

de los plugins que no utiliza 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) 
+0

Gracias. Otro ejemplo: plugin Jquery Cookie – ymakux

2

Ejecutar esto en la consola navegador de su elección .

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

Si existe el plugin se imprimirá "Bonjour" como respuesta en su consola.

Cuestiones relacionadas