Frage

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

Stellen Sie sich vor, dass Sie ein Plugin entwickeln, die geladen auf ein anderes Plugin abhängig ist.

Zum Beispiel möchte ich die jQuery Validierung Plugin die dateJS Bibliothek verwendet um zu überprüfen, ob ein bestimmtes Datum gültig ist. Was wäre der beste Weg, um zu erkennen, in der jQuery-Plugin Valdation wenn die dateJS vorhanden sind?

War es hilfreich?

Lösung

Im Allgemeinen jQuery-Plugins sind Namespaces auf dem jQuery Umfang. Sie könnten eine einfache Prüfung durchführen, um zu sehen, ob der Namespace vorhanden ist:

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

dateJs jedoch ist keine jQuery-Plugin. Er modifiziert / erweitert das Javascript Date-Objekt, und ist nicht als jQuery-Namespace hinzugefügt. Sie könnten überprüfen, ob die Methode, die Sie existieren benötigen, zum Beispiel:

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

Aber Sie könnten auf Probleme stoßen, wo die API das native Datum API überlappt.

Andere Tipps

Wenn wir über eine richtige jQuery-Plugin reden (auf dass der fn-Namensraum erstreckt), dann ist der richtige Weg, um das Plugin zu erkennen wäre:

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

Oder weil jedes Plugin ziemlich garantiert einen gewissen Wert haben, der auf true entspricht, können Sie die kürzere

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

BTW, der $ und jQuery ist austauschbar, da der seltsam aussehende Wrapper um ein Plugin zeigt:

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

die Schließung

(function($) {
    //
})

wird unmittelbar gefolgt von einem Aufruf dieser Schließung ‚vorbei‘ jQuery als Parameter

(jQuery)

die $ in der Schließung wird gleich jQuery

Um jQuery-Plugins zu erkennen fand ich genauer die Klammern zu verwenden:

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

für die Plugins, die fn-Namensraum nicht (zum Beispiel pnotify) verwenden, das funktioniert:

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

Das funktioniert nicht:

if($.fn.pluginname)

hat jQuery eine Methode zu überprüfen, ob etwas eine Funktion

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

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

Ich würde empfehlen, dass Sie die DateJS Bibliothek mit Ihrem Plugin bündeln und dokumentieren die Tatsache, dass Sie es getan haben. Nichts ist frustrierender, als wenn Abhängigkeiten erlegen.

Das heißt, aus rechtlichen Gründen nicht immer in der Lage sein kann, alles zu bündeln. Es schadet nie, auch für die Existenz des Plugins verwenden Eran Galperin Antwort vorsichtig und überprüfen zu können.

Führen Sie diese in Ihrem Browser Konsole der Wahl.

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

Wenn das Plugin wird es ausdrucken „bonjour“ als Antwort auf die Konsole.

Diese Art von Ansatz sollte funktionieren.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top