有没有办法检查一个特定的插件是否可用?
想象一下,您正在开发一个插件,该插件依赖于正在加载的另一个插件。
例如,我想让jQuery验证插件使用dateJS库来检查给定的日期是否有效。在jQuery验证插件中,如果dateJS可用,那么最好的检测方法是什么?
这种方法应该是有效的。
var plugin_exists = true; try { // some code that requires that plugin here } catch(err) { plugin_exists = false; }
一般来说,jQuery插件是jQuery作用域中的名称空间。你可以运行一个简单的检查来查看命名空间是否存在:
if(jQuery().pluginName) { //run plugin dependent code }
然而dateJs并不是一个jQuery插件。它修改/扩展javascript date对象,不作为jQuery命名空间添加。你可以检查你需要的方法是否存在,例如:
if(Date.today) { //Use the dateJS today() method }
但是您可能会遇到API与本机Date API重叠的问题。
我强烈建议您将DateJS库与您的插件捆绑在一起,并记录您已经完成的事实。没有什么比查找依赖项更令人沮丧的了。
也就是说,出于法律原因,您可能并不总是能够捆绑所有内容。谨慎使用Eran Galperin的回答是检查插件的存在也不会有什么坏处。
为了检测jQuery插件,我发现使用括号更准确:
如果我们正在谈论一个合适的jQuery插件(一个扩展fn名称空间的插件),那么检测插件的正确方法是:
if(typeof $.fn.pluginname !== 'undefined') { ... }
或者因为每个插件几乎都保证有一些等于true的值,你可以使用更短的
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');}
如果插件存在,它会在你的控制台打印出“bonjour”作为响应。
jQuery有一个方法来检查某个东西是否是函数
if ($.isFunction($.fn.dateJS)) { //your code using the plugin }
API引用:https://api.jquery.com/jQuery.isFunction/