Bagaimana saya bisa mengecek apakah plugin jQuery dimuat?

221

Apakah ada cara untuk memeriksa apakah plugin tertentu tersedia?

Bayangkan Anda sedang mengembangkan plugin yang tergantung pada plugin lain yang sedang dimuat.

Sebagai contoh, saya ingin plugin jQuery Validation menggunakan perpustakaan dateJS untuk memeriksa apakah tanggal yang diberikan valid. Apa yang akan menjadi cara terbaik untuk mendeteksi, di plugin jQuery Valdation jika dateJS tersedia?

Vitor Silva
sumber

Jawaban:

364

Secara umum, plugin jQuery adalah ruang nama pada lingkup jQuery. Anda bisa menjalankan pemeriksaan sederhana untuk melihat apakah namespace ada:

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

dateJs bukanlah plugin jQuery. Itu memodifikasi / memperluas objek tanggal javascript, dan tidak ditambahkan sebagai namespace jQuery. Anda dapat memeriksa apakah metode yang Anda butuhkan ada, misalnya:

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

Tapi Anda mungkin mengalami masalah di mana API tumpang tindih dengan API Tanggal asli.

Eran Galperin
sumber
63
if (jQuery.fn.pluginName) {...} adalah pilihan lain
Nagyman
6
Mungkin sedikit berlebihan, tetapi if ($.isFunction(jQuery.fn.pluginName)) { ... }juga akan memastikan bahwa itu setidaknya berfungsi.
Noyo
saya memiliki fungsi yang memuat skrip, `LoadScript (lokasi, namespcae, callBack)`, fungsi callback dibengkokkan di bawah suatu interval, artinya sampai namespace yaitu window.jQuerytidak disetel, callback tidak akan berjalan, berfungsi dengan baik tetapi sekarang sedang berjalan ke memuat kueri aj ajukan dan untuk memeriksa itu, saya perlu memanggil fungsi pilih jquery seperti jQuery().pluginName, tetapi ketika saya meneruskannya parameter fungsi saya seperti LoadScript("jquery+plugin.js",jquery().plugin)jquery () dosis belum ada
Hassan Nisar Khan
97

Jika kita berbicara tentang plugin jQuery yang tepat (yang memperluas namespace fn), maka cara yang tepat untuk mendeteksi plugin adalah:

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

Atau karena setiap plugin dijamin memiliki nilai yang setara dengan true, Anda dapat menggunakan yang lebih pendek

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

BTW, $ dan jQuery dapat dipertukarkan, seperti yang ditunjukkan oleh pembungkus aneh di sekitar plugin:

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

penutupan

(function($) {
    //
})

diikuti segera oleh panggilan ke penutupan itu 'lewat' jQuery sebagai parameter

(jQuery)

$ pada penutupan diatur sama dengan jQuery

bajingan
sumber
2
Saya membuat fungsifunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle
2
Contoh pertama adalahif(typeof $.fn.pluginname != 'undefined')
dops
1
@dops benar dan saya telah mengedit jawaban sesuai, meskipun saya telah menggunakan triple dinegasikan daripada ganda sama dengan kesetaraan untuk membandingkan kedua jenis dan nilai.
pwdst
1
$dan jQuerytidak selalu dapat dipertukarkan, seperti jQuery dapat (seperti di WordPress) dimuat dalam mode tanpa konflik . Hal ini menyebabkan saya selalu menggunakan steno, dokumen tanpa-konflik-aman siap: jQuery(function($) { // $ is safe in here.... });atau, seperti yang Anda tunjukkan, pola penutupan:, (function($) { // $ is safe in here.... })(jQuery);tergantung pada mood / kebutuhan saya. (BTW, terunggah, karena cek yang Anda rekomendasikan adalah yang saya sukai)
random_user_name
11

Untuk mendeteksi plugin jQuery, saya menemukan lebih akurat untuk menggunakan tanda kurung:

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

untuk plugin yang tidak menggunakan namespace fn (misalnya pnotify), ini berfungsi:

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

Ini tidak berfungsi:

if($.fn.pluginname)
trante
sumber
Terima kasih. Contoh lain - plugin Jquery Cookie
ymakux
1

Saya akan sangat menyarankan agar Anda menggabungkan perpustakaan DateJS dengan plugin Anda dan mendokumentasikan fakta bahwa Anda telah melakukannya. Tidak ada yang lebih membuat frustrasi daripada harus memburu ketergantungan.

Karena itu, untuk alasan hukum, Anda mungkin tidak selalu dapat menggabungkan semuanya. Juga tidak ada salahnya untuk berhati-hati dan memeriksa keberadaan plugin menggunakan jawaban Eran Galperin .

Soviut
sumber
1

Jalankan ini di konsol pilihan browser Anda.

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

Jika ada plugin itu akan mencetak "bonjour" sebagai respons di konsol Anda.

Joshua Pekera
sumber
-1

Pendekatan semacam ini seharusnya berhasil.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
ceejayoz
sumber
6
Hampir tergoda untuk menurunkan suara karena menangkap apa yang Anda dapat (dan seharusnya) mudah dideteksi
pwdst