it-swarm.com.de

Wie kann ich überprüfen, ob ein jQuery-Plugin geladen ist?

Kann ich überprüfen, ob ein bestimmtes Plugin verfügbar ist?

Stellen Sie sich vor, Sie entwickeln ein Plugin, das von einem anderen Plugin abhängt, das geladen wird.

Ich möchte zum Beispiel, dass das jQuery Validation-Plugin die dateJS-Bibliothek verwendet, um zu überprüfen, ob ein bestimmtes Datum gültig ist. Was wäre der beste Weg, um im jQuery Valdation-Plugin festzustellen, ob das DateJS verfügbar war?

214
Vitor Silva

Im Allgemeinen sind jQuery-Plugins Namespaces im jQuery-Bereich. Sie können eine einfache Überprüfung durchführen, um festzustellen, ob der Namespace vorhanden ist:

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

dateJs ist jedoch kein jQuery-Plugin. Es ändert/erweitert das Javascript-Datumsobjekt und wird nicht als jQuery-Namespace hinzugefügt. Sie können beispielsweise überprüfen, ob die von Ihnen benötigte Methode vorhanden ist:

 if(Date.today) {
      //Use the dateJS today() method
 }

Möglicherweise treten jedoch Probleme auf, wenn sich die API mit der nativen Datums-API überschneidet.

348
Eran Galperin

Wenn es sich um ein richtiges jQuery-Plugin handelt (eines, das den fn-Namespace erweitert), ist der richtige Weg, das Plugin zu erkennen:

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

Oder weil jedes Plugin so gut wie garantiert einen Wert hat, der true entspricht, können Sie den kürzeren verwenden

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

Übrigens sind $ und jQuery austauschbar, wie der seltsam aussehende Wrapper um ein Plugin zeigt:

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

die Schließung

(function($) {
    //
})

es folgt sofort ein Aufruf dieses Abschlusses, der jQuery als Parameter 'übergibt'

(jQuery)

das $ im Closure wird gleich jQuery gesetzt

89
rmirabelle

Um jQuery-Plugins zu erkennen, habe ich festgestellt, dass die Verwendung der Klammern genauer ist:

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

für die Plugins, die keinen fn-Namespace verwenden (z. B. pnotify), funktioniert Folgendes:

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}

Das geht nicht:

if($.fn.pluginname)
8
trante

jQuery hat eine Methode, um zu prüfen, ob etwas eine Funktion ist

if ($.isFunction($.fn.dateJS)) {
    //your code using the plugin
}

API-Referenz: https://api.jquery.com/jQuery.isFunction/

2
HasanG

Es wird dringend empfohlen, die DateJS-Bibliothek mit Ihrem Plugin zu bündeln und die Tatsache zu dokumentieren, dass Sie dies getan haben. Nichts ist frustrierender, als Abhängigkeiten aufzuspüren.

Aus rechtlichen Gründen können Sie jedoch möglicherweise nicht immer alles bündeln. Es tut auch nie weh, vorsichtig zu sein und die Existenz des Plugins mit Eran Galperins Antwort zu überprüfen.

1
Soviut

Führen Sie dies in der Browserkonsole Ihrer Wahl aus.

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

Wenn das Plugin existiert, gibt es "bonjour" als Antwort in Ihrer Konsole aus.

1
Joshua Pekera