Comment puis-je vérifier si un plugin jQuery est chargé?


221

Existe-t-il un moyen de vérifier si un plugin particulier est disponible?

Imaginez que vous développez un plugin qui dépend du chargement d'un autre plugin.

Par exemple, je veux que le plugin jQuery Validation utilise la bibliothèque dateJS pour vérifier si une date donnée est valide. Quelle serait la meilleure façon de détecter, dans le plugin jQuery Valdation, si la dateJS était disponible?



Réponses:


364

De manière générale, les plugins jQuery sont des espaces de noms sur la portée 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 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 où l'API chevauche l'API Date native.


63
if (jQuery.fn.pluginName) {...} est une autre option
Nagyman

6
Peut-être un peu exagéré, mais if ($.isFunction(jQuery.fn.pluginName)) { ... }garantira également qu'il s'agit au moins d'une fonction.
Noyo

j'ai une fonction qui charge le script, `LoadScript (location, namespcae, callBack)`, la fonction de rappel est déformée sous un intervalle, ce qui signifie que jusqu'à ce que l'espace de noms window.jQueryn'est pas défini, le rappel ne fonctionnera pas, cela fonctionne bien mais maintenant charger le plugin aj query et pour vérifier cela, j'ai besoin d'appeler jquery select function like jQuery().pluginName, mais quand je le passe mon paramètre de fonction comme LoadScript("jquery+plugin.js",jquery().plugin)jquery () dose n'existe pas encore
Hassan Nisar Khan

97

Si nous parlons d'un plugin jQuery approprié (celui 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 équivalente à true, vous pouvez utiliser le plus court

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

BTW, $ et jQuery sont interchangeables, comme le montre l'étrange wrapper autour d'un plugin:

(function($) {
    //
})(jQuery))

la fermeture

(function($) {
    //
})

est immédiatement suivi d'un appel à cette fermeture «passant» jQuery comme paramètre

(jQuery)

le $ dans la fermeture est égal à jQuery


2
J'ai fait une fonctionfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
Le premier exemple devrait êtreif(typeof $.fn.pluginname != 'undefined')
dops

1
@dops est correct et j'ai modifié la réponse en conséquence, bien que j'aie utilisé une égalité triple plutôt que double égal pour comparer à la fois le type et la valeur.
pwdst

1
$et jQueryne sont pas toujours interchangeables, car jQuery peut être (comme dans WordPress) chargé en mode sans conflit . Cela m'a amené à toujours utiliser le raccourci, un document sans conflit prêt: jQuery(function($) { // $ is safe in here.... });ou, comme vous le faites remarquer, le modèle de fermeture:, (function($) { // $ is safe in here.... })(jQuery);selon mon humeur / besoin. (BTW, voté, car le chèque que vous recommandez est celui que je préfère)
random_user_name

11

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

if(jQuery().pluginName) {
    //run plugin dependent code
}

8

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)

Merci. Un autre exemple - Jquery Cookie plugin
ymakux


1

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 les dépendances.

Cela dit, pour des raisons juridiques, vous ne pourrez pas toujours tout regrouper. Il n'est également jamais mauvais d'être prudent et de vérifier l'existence du plugin en utilisant la réponse d'Eran Galperin .


1

Exécutez cela dans la console de votre navigateur de choix.

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

Si le plugin existe, il imprimera "bonjour" comme réponse dans votre console.


-1

Ce type d'approche devrait fonctionner.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}

6
Presque tenté de voter pour attraper ce que vous pouvez (et devriez) détecter facilement
pwdst
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.