ฉันจะตรวจสอบว่ามีการโหลดปลั๊กอิน jQuery ได้อย่างไร


221

มีวิธีใดบ้างในการตรวจสอบว่ามีปลั๊กอินเฉพาะหรือไม่

ลองนึกภาพว่าคุณกำลังพัฒนาปลั๊กอินที่ขึ้นอยู่กับปลั๊กอินอื่นที่กำลังโหลด

ตัวอย่างเช่นฉันต้องการปลั๊กอินการตรวจสอบ jQuery เพื่อใช้ไลบรารี dateJS เพื่อตรวจสอบว่าวันที่ที่ระบุนั้นถูกต้องหรือไม่ อะไรจะเป็นวิธีที่ดีที่สุดในการตรวจสอบในปลั๊กอิน jQuery Valdation หาก dateJS พร้อมใช้งาน



คำตอบ:


364

โดยทั่วไปปลั๊กอิน jQuery เป็นเนมสเปซบนขอบเขต jQuery คุณสามารถเรียกใช้การตรวจสอบง่าย ๆ เพื่อดูว่ามีเนมสเปซอยู่หรือไม่:

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

อย่างไรก็ตาม dateJs ไม่ใช่ปลั๊กอิน jQuery มันแก้ไข / ขยายวัตถุวันที่ javascript และไม่ได้เพิ่มเป็น jQuery namespace คุณสามารถตรวจสอบว่าวิธีการที่คุณต้องการมีอยู่เช่น:

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

แต่คุณอาจพบปัญหาที่ API ทับซ้อนกับ API วันที่ดั้งเดิม


63
if (jQuery.fn.pluginName) {... } เป็นอีกตัวเลือก
Nagyman

6
อาจ overkill เล็กน้อย แต่if ($.isFunction(jQuery.fn.pluginName)) { ... }จะให้แน่ใจว่าอย่างน้อยก็เป็นฟังก์ชั่น
Noyo

ฉันมีฟังก์ชั่นที่โหลดสคริปต์, `LoadScript (ตำแหน่ง, namespcae, callBack) ', ฟังก์ชันการเรียกกลับถูกบิดเบี้ยวภายใต้ช่วงเวลา, หมายความว่าจนกว่าwindow.jQueryจะไม่มีการตั้งค่าการเรียกกลับจะไม่ทำงาน, มันทำงานได้ดี แต่ตอนนี้ im tring โหลดปลั๊กอินแบบสอบถาม aj และเพื่อตรวจสอบว่าฉันจำเป็นต้องเรียกใช้ฟังก์ชั่นเลือก jquery เช่นjQuery().pluginNameแต่เมื่อฉันผ่านมันพารามิเตอร์ฟังก์ชั่นของฉันเช่นLoadScript("jquery+plugin.js",jquery().plugin)jquery () ปริมาณยังไม่มีอยู่
Hassan Nisar Khan

97

หากเรากำลังพูดถึงปลั๊กอิน jQuery ที่เหมาะสม (ปลั๊กอินที่ขยาย fn เนมสเปซ) ดังนั้นวิธีที่เหมาะสมในการตรวจสอบปลั๊กอินจะเป็น:

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

หรือเนื่องจากปลั๊กอินทุกตัวรับประกันได้ค่อนข้างมากว่ามีค่าที่เท่ากับจริงคุณจึงสามารถใช้ค่าที่สั้นกว่าได้

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

BTW, $ และ jQuery สามารถใช้แทนกันได้เนื่องจาก wrapper ที่ดูแปลก ๆ รอบ ๆ ปลั๊กอินแสดงให้เห็น:

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

การปิด

(function($) {
    //
})

ตามด้วยการเรียกไปยังการปิด 'ผ่าน' jQuery ตามพารามิเตอร์ทันที

(jQuery)

$ ในการปิดการตั้งค่าเท่ากับ jQuery


2
ฉันทำฟังก์ชั่นfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
ตัวอย่างแรกควรจะเป็นif(typeof $.fn.pluginname != 'undefined')
dops

1
@dops ถูกต้องและฉันได้แก้ไขคำตอบตามนั้นแม้ว่าฉันจะใช้สามเมื่อตะกี้มากกว่าความเท่าเทียมสองเท่าเพื่อเปรียบเทียบทั้งประเภทและค่า
pwdst

1
$และjQueryไม่ได้มักจะใช้แทนกันได้เช่น jQuery สามารถ (เช่นใน WordPress) โหลดในโหมดความขัดแย้ง นี้ได้เกิดจากฉันไปเสมอใช้จดชวเลขเอกสารไม่มีความขัดแย้งปลอดภัยพร้อมแล้ว: jQuery(function($) { // $ is safe in here.... });หรือที่คุณชี้ให้เห็นรูปแบบการปิด: (function($) { // $ is safe in here.... })(jQuery);ขึ้นอยู่กับอารมณ์ของฉัน / ต้อง (BTW เพิ่มขึ้นเนื่องจากการตรวจสอบที่คุณแนะนำคือสิ่งที่ฉันต้องการ)
random_user_name

11

ในการตรวจสอบปลั๊กอิน jQuery ฉันพบว่าแม่นยำมากขึ้นในการใช้วงเล็บ:

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

8

สำหรับปลั๊กอินที่ไม่ได้ใช้เนมสเปซ fn (เช่น pnotify) การทำงานนี้:

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

สิ่งนี้ใช้ไม่ได้:

if($.fn.pluginname)

ขอบคุณ อีกตัวอย่างหนึ่ง - ปลั๊กอินของ Jquery Cookie
ymakux


1

ฉันขอแนะนำอย่างยิ่งให้คุณรวมไลบรารี DateJS กับปลั๊กอินของคุณและจัดทำเอกสารข้อเท็จจริงที่คุณได้ทำไว้ ไม่มีอะไรน่าผิดหวังไปกว่าการตามล่าการพึ่งพา

ที่กล่าวว่าด้วยเหตุผลทางกฎหมายคุณอาจไม่สามารถรวมทุกสิ่งได้ นอกจากนี้ยังไม่เคยเจ็บที่จะต้องระมัดระวังและตรวจสอบสำหรับการดำรงอยู่ของปลั๊กอินโดยใช้คำตอบของ Eran Galperin


1

รันสิ่งนี้ในคอนโซลเบราว์เซอร์ที่คุณเลือก

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

หากมีปลั๊กอินอยู่มันจะพิมพ์ "bonjour" เป็นการตอบกลับในคอนโซลของคุณ


-1

วิธีการแบบนี้น่าจะใช้ได้

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}

6
เกือบถูกล่อลวงให้ลงคะแนนเพื่อจับสิ่งที่คุณสามารถ (และควร) ตรวจจับได้ง่าย
pwdst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.