Est-il possible de vérifier si un plugin particulier est disponible?
Imaginez que vous développiez un plugin qui dépend du chargement d’un autre plugin.
Par exemple, je veux que le plug-in 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 dateJS était disponible?
De manière générale, les plugins jQuery sont des espaces de noms sur la portée de jQuery. Vous pouvez exécuter une simple vérification 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 de date javascript et n'est pas ajouté en tant qu'espace de nom jQuery. Vous pouvez vérifier si la méthode dont vous avez besoin existe, par exemple:
if(Date.today) {
//Use the dateJS today() method
}
Cependant, vous pouvez rencontrer des problèmes lorsque l'API chevauche l'API Date native.
Si nous parlons d'un plugin jQuery approprié (un qui étend l'espace de nom fn), alors le moyen approprié de détecter le plugin serait:
if(typeof $.fn.pluginname !== 'undefined') { ... }
Ou parce que chaque plugin est pratiquement garanti d'avoir une valeur équivalente à true, vous pouvez utiliser le plus court
if ($.fn.pluginname) { ... }
BTW, $ et jQuery sont interchangeables, comme le montre l’habituel wrapper autour d’un plugin:
(function($) {
//
})(jQuery))
la fermeture
(function($) {
//
})
est suivi immédiatement par un appel à cette fermeture 'transmettant' jQuery en tant que paramètre
(jQuery)
le $ dans la fermeture est égal à jQuery
Pour détecter les plugins jQuery, j'ai trouvé plus précis d'utiliser les crochets:
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 marche pas:
if($.fn.pluginname)
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 de l'API: https://api.jquery.com/jQuery.isFunction/
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, il se peut que vous ne puissiez pas toujours tout regrouper. En outre, il n’est jamais mauvais d’être prudent et de vérifier l’existence du plugin en utilisant réponse d’Eran Galperin .
Exécutez ceci dans la console de votre navigateur de votre choix.
if(jQuery().pluginName){console.log('bonjour');}
Si le plugin existe, il affichera "bonjour" en réponse dans votre console.