Làm cách nào để kiểm tra xem plugin jQuery đã được tải chưa?


221

Có cách nào để kiểm tra nếu một plugin cụ thể có sẵn không?

Hãy tưởng tượng rằng bạn đang phát triển một plugin phụ thuộc vào một plugin khác đang được tải.

Ví dụ: tôi muốn plugin Xác thực jQuery sử dụng thư viện dateJS để kiểm tra xem một ngày đã cho có hợp lệ không. Điều gì sẽ là cách tốt nhất để phát hiện, trong plugin jQuery Valdation nếu dateJS có sẵn?



Câu trả lời:


364

Nói chung, các plugin jQuery là không gian tên trên phạm vi jQuery. Bạn có thể chạy một kiểm tra đơn giản để xem nếu không gian tên tồn tại:

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

dateJs tuy nhiên không phải là một plugin jQuery. Nó sửa đổi / mở rộng đối tượng ngày javascript và không được thêm dưới dạng không gian tên jQuery. Bạn có thể kiểm tra xem phương thức bạn cần có tồn tại không, ví dụ:

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

Nhưng bạn có thể gặp phải các vấn đề trong đó API chồng lấp API ngày gốc.


63
if (jQuery.fn.pluginName) {...} là một tùy chọn khác
Nagyman

6
Có thể hơi quá mức, nhưng if ($.isFunction(jQuery.fn.pluginName)) { ... }cũng sẽ đảm bảo rằng đó ít nhất là một chức năng.
Noyo

Tôi có một hàm tải tập lệnh, `LoadScript (location, nampcae, callBack)`, hàm gọi lại bị vênh theo một khoảng, có nghĩa là cho đến khi không gian tên tức window.jQuerylà không được đặt thì cuộc gọi lại sẽ không chạy, nó hoạt động tốt nhưng bây giờ tôi đang chạy đến tải plugin truy vấn aj và để kiểm tra xem, tôi cần gọi hàm jquery chọn như thế nào jQuery().pluginName, nhưng khi tôi chuyển nó, tham số hàm của tôi như LoadScript("jquery+plugin.js",jquery().plugin)liều jquery () chưa tồn tại
Hassan Nisar Khan

97

Nếu chúng ta đang nói về một plugin jQuery thích hợp (một plugin mở rộng không gian tên fn), thì cách thích hợp để phát hiện plugin sẽ là:

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

Hoặc bởi vì mọi plugin đều được đảm bảo có nhiều giá trị tương đương với true, bạn có thể sử dụng ngắn hơn

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

BTW, $ và jQuery có thể hoán đổi cho nhau, vì trình bao bọc trông kỳ quặc xung quanh một plugin thể hiện:

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

đóng cửa

(function($) {
    //
})

được theo dõi ngay lập tức bởi một lệnh gọi đến việc đóng 'chuyển' jQuery làm tham số

(jQuery)

$ trong bao đóng được đặt bằng với jQuery


2
Tôi đã thực hiện một chức năngfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
Ví dụ đầu tiên phải làif(typeof $.fn.pluginname != 'undefined')
dops

1
@dops là chính xác và tôi đã chỉnh sửa câu trả lời tương ứng, mặc dù tôi đã sử dụng bộ ba phủ định thay vì gấp đôi bằng đẳng thức để so sánh cả loại và giá trị.
pwdst

1
$jQuerykhông phải lúc nào cũng có thể hoán đổi cho nhau, vì jQuery có thể (như trong WordPress) được tải trong chế độ không xung đột . Điều này đã khiến tôi luôn luôn sử dụng tài liệu tốc ký, không xung đột, sẵn sàng: jQuery(function($) { // $ is safe in here.... });hoặc, như bạn chỉ ra, mô hình đóng cửa : (function($) { // $ is safe in here.... })(jQuery);, tùy thuộc vào tâm trạng / nhu cầu của tôi. (BTW, được nâng cấp, vì séc bạn đề xuất là loại tôi thích)
Random_user_name

11

Để phát hiện các trình cắm jQuery tôi thấy chính xác hơn khi sử dụng dấu ngoặc:

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

8

đối với các plugin không sử dụng không gian tên fn (ví dụ pnotify), điều này hoạt động:

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

Điều này không hoạt động:

if($.fn.pluginname)

Cảm ơn. Một ví dụ khác - Plugin Jquery Cookie
ymakux


1

Tôi thực sự khuyên bạn nên gói thư viện DateJS với plugin của bạn và ghi lại sự thật rằng bạn đã thực hiện nó. Không có gì khó chịu hơn việc phải săn lùng những người phụ thuộc.

Điều đó nói rằng, vì lý do pháp lý, bạn có thể không phải lúc nào cũng có thể bó mọi thứ. Nó cũng không bao giờ đau lòng để thận trọng và kiểm tra sự tồn tại của plugin bằng câu trả lời của Eran Galperin .


1

Chạy này trong bảng điều khiển trình duyệt của bạn lựa chọn.

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

Nếu plugin tồn tại, nó sẽ in ra "bonjour" dưới dạng phản hồi trong bảng điều khiển của bạn.


-1

Cách tiếp cận này nên làm việc.

var plugin_exists = true;

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

6
Hầu như bị cám dỗ để downvote để nắm bắt những gì bạn có thể (và nên) dễ dàng phát hiện
pwdst 10/12/14
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.