【问题标题】:How can I check if a jQuery plugin is loaded?如何检查是否加载了 jQuery 插件?
【发布时间】:2010-09-28 21:24:39
【问题描述】:

有没有办法检查某个插件是否可用?

假设您正在开发一个依赖于正在加载的另一个插件的插件。

例如,我希望 jQuery 验证插件使用 dateJS 库来检查给定日期是否有效。如果 dateJS 可用,在 jQuery Valdation 插件中检测的最佳方法是什么?

【问题讨论】:

标签: jquery jquery-plugins


【解决方案1】:

一般来说,jQuery 插件是 jQuery 范围内的命名空间。您可以运行一个简单的检查来查看命名空间是否存在:

 if(jQuery().pluginName) {
     //run plugin dependent code
 }

dateJs 然而不是一个 jQuery 插件。它修改/扩展 javascript 日期对象,并且不作为 jQuery 命名空间添加。您可以检查您需要的方法是否存在,例如:

 if(Date.today) {
      //Use the dateJS today() method
 }

但您可能会遇到 API 与原生 Date API 重叠的问题。

【讨论】:

  • if(jQuery.fn.pluginName) {...} 是另一种选择
  • 可能有点矫枉过正,但if ($.isFunction(jQuery.fn.pluginName)) { ... } 也将确保它至少是一个函数。
  • 我有一个加载脚本的函数,`LoadScript (location,namespcae,callBack)`,回调函数在一个间隔下被扭曲,这意味着直到命名空间即window.jQuery没有设置回调将没有运行,它工作正常,但现在我正在尝试加载 aj 查询插件并检查它,我需要调用 jquery 选择函数,如 jQuery().pluginName,但是当我传递它时,我的函数参数如 LoadScript("jquery+plugin.js",jquery().plugin) jquery() 不存在还
【解决方案2】:

如果我们谈论的是一个合适的 jQuery 插件(一个扩展 fn 命名空间的插件),那么检测插件的正确方法是:

if(typeof $.fn.pluginname !== 'undefined') { ... }

或者因为几乎可以保证每个插件都有一些等于 true 的值,所以您可以使用较短的

if ($.fn.pluginname) { ... }

顺便说一句,$ 和 jQuery 是可以互换的,就像插件周围看起来很奇怪的包装器所展示的那样:

(function($) {
    //
})(jQuery))

关闭

(function($) {
    //
})

紧随其后的是对该闭包“传递”jQuery作为参数的调用

(jQuery)

闭包中的 $ 设置为等于 jQuery

【讨论】:

  • 我做了一个函数function isPluginLoaded(plugin) { return !!$.fn[plugin] }
  • 第一个例子应该是if(typeof $.fn.pluginname != 'undefined')
  • $jQuery 不是总是可互换的,因为 jQuery 可以(例如在 WordPress 中)加载到 no-conflict mode 中。这导致我总是使用速记、无冲突安全文档:jQuery(function($) { // $ is safe in here.... });,或者,正如您所指出的,关闭模式:(function($) { // $ is safe in here.... })(jQuery);,这取决于我的心情/需要。 (顺便说一句,赞成,因为您推荐的支票是我更喜欢的支票)
【解决方案3】:

为了检测 jQuery 插件,我发现使用括号更准确:

if(jQuery().pluginName) {
    //run plugin dependent code
}

【讨论】:

    【解决方案4】:

    对于不使用 fn 命名空间的插件(例如 pnotify),这是可行的:

    if($.pluginname) {
        alert("plugin loaded");
    } else {
        alert("plugin not loaded");
    }
    

    这不起作用:

    if($.fn.pluginname)
    

    【讨论】:

    • 谢谢。另一个例子 - Jquery Cookie 插件
    【解决方案5】:

    jQuery 有一个方法来检查某个东西是否是一个函数

    if ($.isFunction($.fn.dateJS)) {
        //your code using the plugin
    }
    

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

    【讨论】:

      【解决方案6】:

      我强烈建议您将 DateJS 库与您的插件捆绑在一起,并记录您已经完成它的事实。没有什么比不得不寻找依赖项更令人沮丧的了。

      也就是说,出于法律原因,您可能无法始终捆绑所有内容。小心谨慎并使用Eran Galperin's answer 检查插件是否存在也不会有什么坏处。

      【讨论】:

        【解决方案7】:

        在您选择的浏览器控制台中运行它。

        if(jQuery().pluginName){console.log('bonjour');}

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

        【讨论】:

          【解决方案8】:

          这种方法应该可行。

          var plugin_exists = true;
          
          try {
            // some code that requires that plugin here
          } catch(err) {
            plugin_exists = false;
          }
          

          【讨论】:

          • 几乎想投反对票,因为您可以(并且应该)轻松检测到什么
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-18
          • 2013-02-17
          • 2012-07-29
          • 2011-11-12
          • 1970-01-01
          • 1970-01-01
          • 2014-09-26
          相关资源
          最近更新 更多