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

221

Gibt es eine Möglichkeit zu überprüfen, ob ein bestimmtes Plugin verfügbar ist?

Stellen Sie sich vor, Sie entwickeln ein Plugin, das davon abhängt, dass ein anderes Plugin geladen wird.

Zum Beispiel möchte ich, 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 zu erkennen, ob das Datum JS verfügbar ist?

Vitor Silva
quelle

Antworten:

364

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, bei denen die API die native Datums-API überlappt.

Eran Galperin
quelle
63
if (jQuery.fn.pluginName) {...} ist eine weitere Option
Nagyman
6
Vielleicht ein wenig übertrieben, wird aber if ($.isFunction(jQuery.fn.pluginName)) { ... }auch sicherstellen, dass es zumindest eine Funktion ist.
Noyo
Ich habe eine Funktion, die das Skript lädt, `LoadScript (Speicherort, Namespcae, CallBack)`, Rückruffunktion wird in einem Intervall verzerrt, bedeutet, bis der Namespace dh window.jQuerynicht gesetzt ist, wird der Rückruf nicht ausgeführt, es funktioniert gut, aber jetzt wird ausgeführt Laden Sie ein Abfrage-Plugin und um dies zu überprüfen, muss ich jquery select function wie aufrufen jQuery().pluginName, aber wenn ich es übergebe, ist mein Funktionsparameter wie LoadScript("jquery+plugin.js",jquery().plugin)jquery () noch nicht vorhanden
Hassan Nisar Khan
97

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

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

Oder weil garantiert ist, dass jedes Plugin einen Wert hat, der true entspricht, können Sie das kürzere 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 Abschluss wird gleich jQuery gesetzt

rmirabelle
quelle
2
Ich habe eine Funktion gemachtfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle
2
Das erste Beispiel sollte seinif(typeof $.fn.pluginname != 'undefined')
Dops
1
@dops ist korrekt und ich habe die Antwort entsprechend bearbeitet, obwohl ich ein negiertes Triple anstelle von Double Equals Equality verwendet habe, um Typ und Wert zu vergleichen.
pwdst
1
$und jQuerysind nicht immer austauschbar, da jQuery (wie in WordPress) im konfliktfreien Modus geladen werden kann . Dies hat mich veranlasst, immer das kurze, konfliktsichere Dokument bereit zu verwenden: jQuery(function($) { // $ is safe in here.... });oder, wie Sie hervorheben, das Abschlussmuster: (function($) { // $ is safe in here.... })(jQuery);je nach Stimmung / Bedarf. (Übrigens, positiv bewertet, da die von Ihnen empfohlene Prüfung die von mir bevorzugte ist)
random_user_name
11

Um jQuery-Plugins zu erkennen, habe ich festgestellt, dass die Klammern genauer sind:

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

Für die Plugins, die keinen fn-Namespace verwenden (zum Beispiel pnotify), funktioniert dies:

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

Das funktioniert nicht:

if($.fn.pluginname)
trante
quelle
Vielen Dank. Ein weiteres Beispiel - Jquery Cookie Plugin
ymakux
1

Ich würde dringend empfehlen, dass Sie die DateJS-Bibliothek mit Ihrem Plugin bündeln und die Tatsache dokumentieren, dass Sie es getan haben. Nichts ist frustrierender, als Abhängigkeiten suchen zu müssen.

Aus rechtlichen Gründen können Sie jedoch möglicherweise nicht immer alles bündeln. Es tut auch nie weh, vorsichtig zu sein und anhand der Antwort von Eran Galperin zu prüfen, ob das Plugin vorhanden ist .

Soviut
quelle
1

Führen Sie dies in der Browser-Konsole Ihrer Wahl aus.

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

Wenn das Plugin vorhanden ist, wird "bonjour" als Antwort in Ihrer Konsole ausgedruckt.

Joshua Pekera
quelle
-1

Diese Art von Ansatz sollte funktionieren.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
ceejayoz
quelle
6
Fast versucht, für das zu fangen, was Sie leicht erkennen können (und sollten)
pwdst