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?
jquery
jquery-plugins
Vitor Silva
la source
la source
Réponses:
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:
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:
Mais vous pourriez rencontrer des problèmes où l'API chevauche l'API Date native.
la source
if ($.isFunction(jQuery.fn.pluginName)) { ... }
garantira également qu'il s'agit au moins d'une fonction.window.jQuery
n'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 likejQuery().pluginName
, mais quand je le passe mon paramètre de fonction commeLoadScript("jquery+plugin.js",jquery().plugin)
jquery () dose n'existe pas encoreSi 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:
Ou parce que chaque plugin est à peu près garanti d'avoir une valeur équivalente à true, vous pouvez utiliser le plus court
BTW, $ et jQuery sont interchangeables, comme le montre l'étrange wrapper autour d'un plugin:
la fermeture
est immédiatement suivi d'un appel à cette fermeture «passant» jQuery comme paramètre
le $ dans la fermeture est égal à jQuery
la source
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
etjQuery
ne 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)Pour détecter les plugins jQuery, j'ai trouvé plus précis d'utiliser les crochets:
la source
pour les plugins qui n'utilisent pas l'espace de noms fn (par exemple pnotify), cela fonctionne:
Cela ne fonctionne pas:
la source
jQuery a une méthode pour vérifier si quelque chose est une fonction
Référence API: https://api.jquery.com/jQuery.isFunction/
la source
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 .
la source
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.
la source
Ce type d'approche devrait fonctionner.
la source