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?

209
demandé sur meagar 2008-12-30 20:26:13

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.

331
répondu Eran Galperin 2011-06-21 23:43:26

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

87
répondu rmirabelle 2014-12-10 15:31:02

Pour détecter les plugins jQuery, j'ai trouvé plus précis d'utiliser les parenthèses:

if(jQuery().pluginName) {
    //run plugin dependent code
}
11
répondu Suso Guez 2010-03-23 10:47:08

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)
9
répondu trante 2013-05-04 18:49:10

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.

2
répondu Joshua Pekera 2015-06-13 18:42:33

Ce genre d'approche devrait fonctionner.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
1
répondu ceejayoz 2008-12-30 17:35:49

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.

1
répondu Soviut 2017-05-23 12:26:37

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/

1
répondu x-freestyler 2017-04-20 12:30:41