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?
jquery
jquery-plugins
Vitor Silva
sumber
sumber
Jawaban:
Secara umum, plugin jQuery adalah ruang nama pada lingkup jQuery. Anda bisa menjalankan pemeriksaan sederhana untuk melihat apakah namespace ada:
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:
Tapi Anda mungkin mengalami masalah di mana API tumpang tindih dengan API Tanggal asli.
sumber
if ($.isFunction(jQuery.fn.pluginName)) { ... }
juga akan memastikan bahwa itu setidaknya berfungsi.window.jQuery
tidak 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 sepertijQuery().pluginName
, tetapi ketika saya meneruskannya parameter fungsi saya sepertiLoadScript("jquery+plugin.js",jquery().plugin)
jquery () dosis belum adaJika kita berbicara tentang plugin jQuery yang tepat (yang memperluas namespace fn), maka cara yang tepat untuk mendeteksi plugin adalah:
Atau karena setiap plugin dijamin memiliki nilai yang setara dengan true, Anda dapat menggunakan yang lebih pendek
BTW, $ dan jQuery dapat dipertukarkan, seperti yang ditunjukkan oleh pembungkus aneh di sekitar plugin:
penutupan
diikuti segera oleh panggilan ke penutupan itu 'lewat' jQuery sebagai parameter
$ pada penutupan diatur sama dengan jQuery
sumber
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
danjQuery
tidak 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)Untuk mendeteksi plugin jQuery, saya menemukan lebih akurat untuk menggunakan tanda kurung:
sumber
untuk plugin yang tidak menggunakan namespace fn (misalnya pnotify), ini berfungsi:
Ini tidak berfungsi:
sumber
jQuery memiliki metode untuk memeriksa apakah ada fungsi
Referensi API: https://api.jquery.com/jQuery.isFunction/
sumber
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 .
sumber
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.
sumber
Pendekatan semacam ini seharusnya berhasil.
sumber