有没有办法检查特定插件是否可用?
想象一下,您正在开发一个依赖于正在加载的另一个插件的插件。
例如,我希望jQuery Validation插件使用dateJS库来检查给定日期是否有效。如果dateJS可用,在jQuery Valdation插件中检测的最佳方法是什么?
答案 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
}
答案 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;
}