Question

Y a-t-il un moyen 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 souhaite 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?

Était-ce utile?

La solution

De manière générale, les plugins jQuery sont des espaces de noms sur la portée de jQuery. Vous pouvez effectuer 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
 }

Toutefois, vous pouvez rencontrer des problèmes de superposition de l'API avec l'API Date native.

Autres conseils

Si nous parlons d'un plug-in jQuery approprié (sur celui qui étend l'espace de nom fn), le moyen approprié de détecter le plug-in serait:

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

Ou parce que chaque plug-in est quasiment garanti d'avoir une valeur équivalente à true, vous pouvez utiliser le plus court

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

BTW, les balises $ 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 fonctionne 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 de devoir traquer des dépendances.

Cela dit, pour des raisons juridiques, vous ne pourrez pas toujours tout regrouper. Par ailleurs, il n’est jamais inutile d’être prudent et de vérifier l’existence du plugin à l’aide de la réponse d’Eran Galperin .

Exécutez cette opération dans la console de votre choix.

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

Si le plug-in existe, il affichera " bonjour " en réponse dans votre console.

Ce type d’approche devrait fonctionner.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top