Pergunta

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

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

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

Foi útil?

Solução

De um modo geral, plugins jQuery são namespaces no âmbito jQuery. Você pode executar uma verificação simples para ver se existe espaço de nomes:

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

dateJs no entanto, não é um plugin jQuery. Ele modifica / estende o objeto data JavaScript, e não é adicionado como um espaço para 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 executar em problemas em que a API se sobrepõe a Data API nativa.

Outras dicas

Se estamos falando de um plugin jQuery adequada (em que estende o namespace fn), então a forma apropriada para detectar o plugin seria:

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

Ou porque cada plugin é praticamente garantido para ter algum valor que equivale a verdade, você pode usar o mais curto

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

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

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

o fechamento

(function($) {
    //
})

é seguido imediatamente por uma chamada para que o fechamento 'de passagem' jQuery como o parâmetro

(jQuery)

o $ no fechamento está definida igual a jQuery

Para detectar jQuery plugins eu achei mais preciso usar os suportes:

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)

jQuery tem um método para verificar se algo é uma função

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

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

Eu recomendaria fortemente que você unir a biblioteca DateJS com o seu plugin e documentar o fato de que você tenha feito isso. Nada é mais frustrante do que ter que caçar dependências.

Dito isso, por razões legais, você não pode sempre ser capaz de empacotar tudo. Ele também nunca é demais para ser cauteloso e verificar a existência do plugin usando o Eran Galperin resposta .

Executar este no console do seu navegador de escolha.

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

Se o plugin existe ele vai imprimir "bonjour" como uma resposta em seu console.

Este tipo de abordagem deve funcionar.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top