Comment puis-je vérifier si un plugin jQuery est chargé?
Est-il un moyen de vérifier si un plugin est disponible?
Imaginez que vous développez un plugin qui dépend d'un autre plugin en cours de chargement.
Par exemple, je veux que le plugin de Validation jQuery utilise la bibliothèque dateJS pour vérifier si une date donnée est valide. Quel serait le meilleur moyen de détecter, dans le plugin jQuery Valdation si le dateJS était disponible?
8 réponses
D'une manière générale, les plugins jQuery sont des espaces de noms sur la portée jQuery. Vous pouvez exécuter une vérification simple pour voir si l'espace de noms existe:
if(jQuery().pluginName) {
//run plugin dependent code
}
DateJs n'est cependant pas un plugin jQuery. Il modifie / étend l'objet Date javascript et n'est pas ajouté en tant qu'espace de noms jQuery. Vous pouvez vérifier si la méthode dont vous avez besoin existe, par exemple:
if(Date.today) {
//Use the dateJS today() method
}
Mais vous pourriez rencontrer des problèmes lorsque L'API chevauche L'API de Date native.
Si nous parlons d'un plugin jQuery approprié (qui étend l'espace de noms fn), alors la bonne façon de détecter le plugin serait:
if(typeof $.fn.pluginname !== 'undefined') { ... }
Ou parce que chaque plugin est à peu près garanti d'avoir une valeur qui équivaut à true, vous pouvez utiliser le plus court
if ($.fn.pluginname) { ... }
BTW, le $ et jQuery sont interchangeables, comme le montre le wrapper étrange autour d'un plugin:
(function($) {
//
})(jQuery))
La fermeture
(function($) {
//
})
Est immédiatement suivi d'un appel à cette fermeture 'passing' jQuery comme paramètre
(jQuery)
Le $ dans la fermeture est défini sur jQuery
Pour détecter les plugins jQuery, j'ai trouvé plus précis d'utiliser les parenthèses:
if(jQuery().pluginName) {
//run plugin dependent code
}
Pour les plugins qui n'utilisent pas l'espace de noms fn (par exemple pnotify), cela fonctionne:
if($.pluginname) {
alert("plugin loaded");
} else {
alert("plugin not loaded");
}
Cela ne fonctionne pas:
if($.fn.pluginname)
Exécutez ceci dans la console de votre navigateur de choix.
if(jQuery().pluginName){console.log('bonjour');}
Si le plugin existe, il imprimera "bonjour" en réponse dans votre console.
Ce genre d'approche devrait fonctionner.
var plugin_exists = true;
try {
// some code that requires that plugin here
} catch(err) {
plugin_exists = false;
}
Je vous recommande fortement de regrouper la bibliothèque DateJS avec votre plugin et de documenter le fait que vous l'avez fait. Rien n'est plus frustrant que d'avoir à traquer les dépendances.
Cela dit, pour des raisons juridiques, vous ne pouvez pas toujours être en mesure de regrouper tout. Cela ne fait jamais de mal non plus d'être prudent et de vérifier l'existence du plugin en utilisant la réponse D'Eran Galperin.
JQuery a une méthode pour vérifier si quelque chose est une fonction
if ($.isFunction($.fn.dateJS)) {
//your code using the plugin
}
Référence API: https://api.jquery.com/jQuery.isFunction/