Como posso verificar se um plugin jQuery está carregado?

221

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

Imagine que você está desenvolvendo um plug-in que depende de outro plug-in sendo carregado.

Por exemplo, 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 estivesse disponível?

Vitor Silva
fonte

Respostas:

364

De um modo geral, os plugins jQuery são namespaces no escopo do jQuery. Você pode executar uma verificação simples para ver se o espaço para nome existe:

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

dateJs no entanto não é um plugin jQuery. Ele modifica / estende o objeto de data do javascript e não é adicionado como um espaço para nome do jQuery. Você pode verificar se o método necessário existe, por exemplo:

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

Mas você pode ter problemas nos quais a API se sobrepõe à API nativa da Data.

Eran Galperin
fonte
63
if (jQuery.fn.pluginName) {...} é outra opção
Nagyman 16/06/10
6
Talvez um pouco exagerado, mas if ($.isFunction(jQuery.fn.pluginName)) { ... }também garantirá que seja pelo menos uma função.
Noyo
Eu tenho uma função que carrega o script, `LoadScript (location, namespcae, callBack)`, a função de retorno de chamada é deformada em um intervalo, significa que até o espaço de nome, ou window.jQueryseja, não definido, o retorno de chamada não será executado, funciona bem, mas agora está tentando carregar aj consulta plugin e para verificar se, eu preciso chamar jquery função select como jQuery().pluginName, mas quando eu passar meu parâmetro de função como LoadScript("jquery+plugin.js",jquery().plugin)jQuery () não dosar existe ainda
Hassan Nisar Khan
97

Se estamos falando de um plugin jQuery adequado (que estende o espaço para nome fn), a maneira correta de detectar o plug-in seria:

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

Ou como todos os plug-ins têm praticamente a garantia de ter algum valor igual a verdadeiro, você pode usar o menor

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

BTW, o $ e o jQuery são intercambiáveis, como o wrapper de aparência estranha em torno de um plug-in demonstra:

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

o encerramento

(function($) {
    //
})

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

(jQuery)

o $ no fechamento é definido como jQuery

rmirabelle
fonte
2
Eu fiz uma funçãofunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle
2
O primeiro exemplo deve serif(typeof $.fn.pluginname != 'undefined')
dops 30/09/14
1
@dops está correto e editei a resposta de acordo, embora tenha usado um triplo negado em vez de o dobro igual a igualdade para comparar o tipo e o valor.
pwdst
1
$e jQuerynem sempre são intercambiáveis, pois o jQuery pode ser (como no WordPress) carregado no modo sem conflito . Isso me levou a usar sempre o documento taquigráfico, sem conflito de segurança pronto: jQuery(function($) { // $ is safe in here.... });ou, como você ressalta, o padrão de fechamento:, (function($) { // $ is safe in here.... })(jQuery);dependendo do meu humor / necessidade. (BTW, upvoted, como o cheque você recomendaria é o que eu prefiro)
random_user_name
11

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

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

para os plug-ins que não usam o espaço para nome fn (por exemplo, pnotify), isso funciona:

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

Isso não funciona:

if($.fn.pluginname)
trante
fonte
Obrigado. Outro exemplo - plugin do Jquery Cookie
ymakux 2/14/14
1

Eu recomendo fortemente que você agrupe a biblioteca DateJS com seu plug-in e documente o fato de que você fez isso. Nada é mais frustrante do que ter que caçar dependências.

Dito isto, por razões legais, nem sempre é possível agrupar tudo. Também nunca é demais ser cauteloso e verificar a existência do plugin usando a resposta de Eran Galperin .

Soviut
fonte
1

Execute isso no console do seu navegador preferido.

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

Se o plug-in existir, ele imprimirá "bonjour" como resposta no seu console.

Joshua Pekera
fonte
-1

Esse tipo de abordagem deve funcionar.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
ceejayoz
fonte
6
Quase tentado a downvote para a captura do que você pode (e deve) facilmente detectar
pwdst