有什么方法可以检查一个特定的插件是否可用?如何检查jQuery插件是否已加载?
想象一下,您正在开发一个取决于正在加载的另一个插件的插件。
例如,我希望jQuery Validation插件使用dateJS库来检查给定日期是否有效。如果dateJS可用,在jQuery Valuation插件中检测的最佳方法是什么?
有什么方法可以检查一个特定的插件是否可用?如何检查jQuery插件是否已加载?
想象一下,您正在开发一个取决于正在加载的另一个插件的插件。
例如,我希望jQuery Validation插件使用dateJS库来检查给定日期是否有效。如果dateJS可用,在jQuery Valuation插件中检测的最佳方法是什么?
一般来说,jQuery插件是jQuery作用域上的命名空间。你可以运行一个简单的检查,看看是否存在命名空间:然而
if(jQuery().pluginName) {
//run plugin dependent code
}
dateJs不是一个jQuery插件。它修改/扩展了javascript日期对象,并且不作为jQuery名称空间添加。您可以检查您需要的方法是否存在,例如:
if(Date.today) {
//Use the dateJS today() method
}
但是,您可能会遇到API与本机Date API重叠的问题。
这种方法应该工作。
var plugin_exists = true;
try {
// some code that requires that plugin here
} catch(err) {
plugin_exists = false;
}
如果(jQuery.fn.pluginName){...}是一个可以轻松检测到 – pwdst 2014-12-10 15:28:51
我强烈建议您将DateJS库与您的插件捆绑在一起,并记录您已经完成的事实。没有什么比寻找依赖关系更令人沮丧了。
这就是说,出于法律方面的原因,你可能并不总是能够捆绑所有东西。使用Eran Galperin's answer也绝不会因为谨慎而检查插件的存在。
要检测的jQuery插件,我发现用括号更准确:
if(jQuery().pluginName) {
//run plugin dependent code
}
如果我们谈论的是一个正确的jQuery插件(在延伸的FN命名空间),那么检测的正确方法插件是:
if(typeof $.fn.pluginname !== 'undefined') { ... }
还是因为每一个插件是相当多保证有这相当于真正的某个值,则可以使用更短的
if ($.fn.pluginname) { ... }
顺便说一句,在$和jQuery是可以互换的,围绕一个插件看起来很奇怪的包装证明:
(function($) {
//
})(jQuery))
关闭
(function($) {
//
})
由该关闭呼叫紧跟“传球'jQuery的作为
(jQuery)
在封闭的$被设定为等于jQuery的
参数为不使用Fn命名空间(例如pnotify)的插件,这个工程:
if($.pluginname) {
alert("plugin loaded");
} else {
alert("plugin not loaded");
}
这不起作用:
if($.fn.pluginname)
运行此在您选择的浏览器控制台。
if(jQuery().pluginName){console.log('bonjour');}
如果插件存在,它会打印出“卓悦”作为您的控制台响应。
jQuery的必须检查,如果事情是一个功能
if ($.isFunction($.fn.dateJS)) {
//your code using the plugin
}
类似的问题[?如何检查jQuery插件和功能存在(http://stackoverflow.com/q/5339876/782535) – 2013-04-25 05:24:25
[详细文章检查jQuery或jQuery插件是否加载](http://conceptf1.blogspot.com/2013/11/jquery-library-loaded-or-not-validation.html) – 2013-11-16 09:17:59