Como posso verificar se um plugin jQuery está carregado?

Existe alguma maneira de verificar se um plugin específico está disponível?

Imagine que você está desenvolvendo um plugin que depende de outro plugin sendo carregado.

Por exemplo, eu quero que o plugin jQuery Validation use a biblioteca dateJS para verificar se uma determinada data é válida. Qual seria a melhor maneira de detectar, no plugin jQuery Valdation, se o dateJS estava disponível?

De modo geral, os plug-ins do jQuery são namespaces no escopo do jQuery. Você poderia executar uma simples verificação para ver se o namespace existe:

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

dateJs entretanto não é um plugin jQuery. Ele modifica / estende o object de data do javascript e não é adicionado como um namespace do jQuery. Você pode verificar se o método que você precisa existe, por exemplo:

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

Mas você pode encontrar problemas onde a API se sobrepõe à API de data nativa.

Se estamos falando de um plugin jQuery adequado (no qual estende o namespace fn), a maneira correta de detectar o plugin seria:

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

Ou porque cada plug-in é praticamente garantido para ter algum valor que equivale a verdadeiro, você pode usar o menor

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

BTW, o $ e o jQuery são intercambiáveis, como demonstra o wrapper estranho em torno de um plugin:

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

o encerramento

 (function($) { // }) 

é seguido imediatamente por uma chamada para esse fechamento “passando” jQuery como o parâmetro

 (jQuery) 

o $ no fechamento é igual a jQuery

Para detectar plugins jQuery, achei mais preciso usar os colchetes:

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

para os plugins que não usam fn namespace (por exemplo, pnotify), isso funciona:

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

Isso não funciona:

 if($.fn.pluginname) 

Execute isso no console do seu navegador de sua escolha.

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

Se o plugin existir, ele imprimirá “bonjour” como resposta em seu console.

Esse tipo de abordagem deve funcionar.

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

Eu recomendo fortemente que você empacote a biblioteca DateJS com o seu plugin e documente o fato de que você fez isso. Nada é mais frustrante do que ter que caçar dependencies.

Dito isso, por motivos legais, você nem sempre consegue agrupar tudo. Também nunca é demais ser cauteloso e verificar a existência do plugin usando a resposta de Eran Galperin .

jQuery tem um método para verificar se algo é uma function

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

Referência da API: https://api.jquery.com/jQuery.isFunction/