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


221

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

假设您正在开发一个依赖于另一个正在加载的插件的插件。

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



Answers:


364

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

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

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

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

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


63
if(jQuery.fn.pluginName){...}是另一种选择
Nagyman 2010年

6
也许有点过大,但if ($.isFunction(jQuery.fn.pluginName)) { ... }也将确保它至少是一个功能。
Noyo 2013年

我有一个加载脚本的函数,`LoadScript(location,namespcae,callBack)`,回调函数在一定间隔内发生扭曲,这意味着直到window.jQuery未设置名称空间(即未设置回调),它都不会运行,它可以正常工作,但现在正在加载aj查询插件并进行检查,我需要调用jquery select function like jQuery().pluginName,但是当我通过它时,我的功能参数如LoadScript("jquery+plugin.js",jquery().plugin)jquery()尚不存在
Hassan Nisar Khan

97

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

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

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

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

顺便说一句,$和jQuery是可互换的,如插件周围的奇怪包装说明:

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

封闭

(function($) {
    //
})

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

(jQuery)

闭包中的$设置为等于jQuery


2
我做了一个功能function isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
第一个例子应该是if(typeof $.fn.pluginname != 'undefined')
dops

1
@dops是正确的,尽管我使用了取反的三等式而不是双精度等于来比较类型和值,但我已经相应地编辑了答案。
pwdst 2014年

1
$并且jQuery并不总是可互换的,因为jQuery可以(例如WordPress中)以无冲突模式加载。这使我总是使用速记,无冲突安全的文档准备就绪;jQuery(function($) { // $ is safe in here.... });或者,正如您所指出的,关闭模式:(function($) { // $ is safe in here.... })(jQuery);,取决于我的心情/需要。(顺便说一句,赞成,我建议您选择一张支票)
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


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
几乎想
拒绝投票,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.