232

有什么方法可以检查特定插件是否可用?

想象一下,您正在开发一个插件,该插件依赖于正在加载的另一个插件。

例如,我希望 jQuery Validation 插件使用 dateJS 库来检查给定日期是否有效。如果 dateJS 可用,在 jQuery Valdation 插件中检测的最佳方法是什么?

4

8 回答 8

379

一般来说,jQuery 插件是 jQuery 范围内的命名空间。您可以运行一个简单的检查来查看命名空间是否存在:

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

但是 dateJs 不是 jQuery 插件。它修改/扩展 javascript 日期对象,并且不作为 jQuery 命名空间添加。您可以检查您需要的方法是否存在,例如:

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

但是您可能会遇到 API 与本机 Date API 重叠的问题。

于 2008-12-30T17:36:10.603 回答
107

如果我们谈论的是一个合适的 jQuery 插件(一个扩展 fn 命名空间的插件),那么检测插件的正确方法是:

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

或者因为几乎可以保证每个插件都有一些等于 true 的值,所以您可以使用较短的

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

顺便说一句,$ 和 jQuery 是可以互换的,就像插件周围看起来很奇怪的包装器所展示的那样:

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

关闭

(function($) {
    //
})

紧随其后的是对该闭包“传递”jQuery 作为参数的调用

(jQuery)

闭包中的 $ 设置为等于 jQuery

于 2011-03-28T21:54:44.243 回答
11

为了检测 jQuery 插件,我发现使用括号更准确:

if(jQuery().pluginName) {
    //run plugin dependent code
}
于 2010-03-23T10:47:08.047 回答
8

对于不使用 fn 命名空间的插件(例如 pnotify),这是有效的:

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

这不起作用:

if($.fn.pluginname)
于 2013-05-04T18:49:10.450 回答
2

jQuery 有一个方法来检查某个东西是否是一个函数

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

API参考:https ://api.jquery.com/jQuery.isFunction/

于 2017-04-20T12:30:41.170 回答
1

我强烈建议您将 DateJS 库与您的插件捆绑在一起,并记录您已经完成它的事实。没有什么比不得不寻找依赖项更令人沮丧的了。

也就是说,出于法律原因,您可能并不总是能够捆绑所有内容。小心谨慎并使用Eran Galperin 的答案检查插件的存在也永远不会受到伤害。

于 2008-12-31T08:34:48.730 回答
1

在您选择的浏览器控制台中运行它。

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

如果插件存在,它将在您的控制台中打印出“bonjour”作为响应。

于 2015-06-13T18:42:33.007 回答
-1

这种方法应该有效。

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
于 2008-12-30T17:35:49.667 回答