有什么方法可以检查特定插件是否可用?
想象一下,您正在开发一个插件,该插件依赖于正在加载的另一个插件。
例如,我希望 jQuery Validation 插件使用 dateJS 库来检查给定日期是否有效。如果 dateJS 可用,在 jQuery Valdation 插件中检测的最佳方法是什么?
有什么方法可以检查特定插件是否可用?
想象一下,您正在开发一个插件,该插件依赖于正在加载的另一个插件。
例如,我希望 jQuery Validation 插件使用 dateJS 库来检查给定日期是否有效。如果 dateJS 可用,在 jQuery Valdation 插件中检测的最佳方法是什么?
一般来说,jQuery 插件是 jQuery 范围内的命名空间。您可以运行一个简单的检查来查看命名空间是否存在:
if(jQuery().pluginName) {
//run plugin dependent code
}
但是 dateJs 不是 jQuery 插件。它修改/扩展 javascript 日期对象,并且不作为 jQuery 命名空间添加。您可以检查您需要的方法是否存在,例如:
if(Date.today) {
//Use the dateJS today() method
}
但是您可能会遇到 API 与本机 Date API 重叠的问题。
如果我们谈论的是一个合适的 jQuery 插件(一个扩展 fn 命名空间的插件),那么检测插件的正确方法是:
if(typeof $.fn.pluginname !== 'undefined') { ... }
或者因为几乎可以保证每个插件都有一些等于 true 的值,所以您可以使用较短的
if ($.fn.pluginname) { ... }
顺便说一句,$ 和 jQuery 是可以互换的,就像插件周围看起来很奇怪的包装器所展示的那样:
(function($) {
//
})(jQuery))
关闭
(function($) {
//
})
紧随其后的是对该闭包“传递”jQuery 作为参数的调用
(jQuery)
闭包中的 $ 设置为等于 jQuery
为了检测 jQuery 插件,我发现使用括号更准确:
if(jQuery().pluginName) {
//run plugin dependent code
}
对于不使用 fn 命名空间的插件(例如 pnotify),这是有效的:
if($.pluginname) {
alert("plugin loaded");
} else {
alert("plugin not loaded");
}
这不起作用:
if($.fn.pluginname)
jQuery 有一个方法来检查某个东西是否是一个函数
if ($.isFunction($.fn.dateJS)) {
//your code using the plugin
}
我强烈建议您将 DateJS 库与您的插件捆绑在一起,并记录您已经完成它的事实。没有什么比不得不寻找依赖项更令人沮丧的了。
也就是说,出于法律原因,您可能并不总是能够捆绑所有内容。小心谨慎并使用Eran Galperin 的答案检查插件的存在也永远不会受到伤害。
在您选择的浏览器控制台中运行它。
if(jQuery().pluginName){console.log('bonjour');}
如果插件存在,它将在您的控制台中打印出“bonjour”作为响应。
这种方法应该有效。
var plugin_exists = true;
try {
// some code that requires that plugin here
} catch(err) {
plugin_exists = false;
}