如何检查是否加载了jQuery插件?

时间:2008-12-30 17:26:13

标签: jquery jquery-plugins

有没有办法检查特定插件是否可用?

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

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

8 个答案:

答案 0 :(得分:344)

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

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

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

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

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

答案 1 :(得分:87)

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

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

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

if ($.fn.pluginname) { ... }
顺便说一句,$和jQuery是可互换的,因为插件的奇怪外观展示了:

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

关闭

(function($) {
    //
})

紧接着调用该闭包'传递'jQuery作为参数

(jQuery)

闭包中的$设置为等于jQuery

答案 2 :(得分:10)

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

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

答案 3 :(得分:8)

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

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

这不起作用:

if($.fn.pluginname)

答案 4 :(得分:2)

jQuery有一种检查某些东西是否是函数的方法

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

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

答案 5 :(得分:1)

我强烈建议您将DateJS库与您的插件捆绑在一起并记录您已完成的事实。没有什么比追捕依赖性更令人沮丧了。

这就是说,出于法律原因,您可能无法始终捆绑所有内容。使用Eran Galperin's answer检查插件是否存在也要小心谨慎。

答案 6 :(得分:1)

在您选择的浏览器控制台中运行此功能。

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

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

答案 7 :(得分:-1)

这种方法应该有效。

var plugin_exists = true;

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