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?
jquery
jquery-plugins
Vitor Silva
fonte
fonte
Respostas:
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:
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:
Mas você pode ter problemas nos quais a API se sobrepõe à API nativa da Data.
fonte
if ($.isFunction(jQuery.fn.pluginName)) { ... }
também garantirá que seja pelo menos uma função.window.jQuery
seja, 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 comojQuery().pluginName
, mas quando eu passar meu parâmetro de função comoLoadScript("jquery+plugin.js",jquery().plugin)
jQuery () não dosar existe aindaSe estamos falando de um plugin jQuery adequado (que estende o espaço para nome fn), a maneira correta de detectar o plug-in seria:
Ou como todos os plug-ins têm praticamente a garantia de ter algum valor igual a verdadeiro, você pode usar o menor
BTW, o $ e o jQuery são intercambiáveis, como o wrapper de aparência estranha em torno de um plug-in demonstra:
o encerramento
é seguido imediatamente por uma chamada para esse fechamento 'passando' jQuery como o parâmetro
o $ no fechamento é definido como jQuery
fonte
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
ejQuery
nem 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)Para detectar plugins jQuery, achei mais preciso usar os colchetes:
fonte
para os plug-ins que não usam o espaço para nome fn (por exemplo, pnotify), isso funciona:
Isso não funciona:
fonte
O jQuery possui um método para verificar se algo é uma função
Referência da API: https://api.jquery.com/jQuery.isFunction/
fonte
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 .
fonte
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.
fonte
Esse tipo de abordagem deve funcionar.
fonte