有没有办法检查特定插件是否可用?

想象一下,您正在开发一个依赖于正在加载的另一个插件的插件。

例如,我希望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
}

API参考: https://api.jquery.com/jQuery.isFunction/

我强烈建议您将DateJS库与您的插件捆绑在一起并记录您已完成的事实。没有什么比追捕依赖性更令人沮丧了。

这就是说,出于法律原因,您可能无法始终捆绑所有内容。使用 Eran Galperin的回答,谨慎行事并检查插件是否存在也绝对不会受到伤害。

在您选择的浏览器控制台中运行此功能。

<代码>如果{的console.log( '的Bonjour');}(jQuery的()pluginName。)

如果插件存在,它将打印出“bonjour”。作为你控制台的回应。

这种方法应该有效。

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top