【问题标题】:Detect if Cordova plugin exists检测 Cordova 插件是否存在
【发布时间】:2013-07-26 00:47:35
【问题描述】:

有没有办法判断特定的 Cordova 插件是否可以在 Cordova 2.5.0 中调用? Cordova.exec 接受 successFunctionfailFunction 但只有在本机代码执行时才会调用 failFunction。如果接收函数不存在,有没有办法接收错误或回调?我正在寻找一种适用于加载到 WebView 中的删除 URL 的解决方案

http://docs.phonegap.com/en/2.5.0/guide_plugin-development_ios_index.md.html

【问题讨论】:

  • 我知道您正在尝试检测它是否存在,但是您可以不使用 try catch 并达到同样的效果吗?在try中调用插件,如果插件不存在则执行catch中的代码。
  • 为此你需要开发另一个插件来检查另一个插件的存在,你只需要像PluginChecker一样调用smth,看看你请求的插件是否存在
  • 你需要这个吗? ios还是安卓?
  • 理想情况下,我希望它同时适用于两者,但优先考虑的是 iOS。基本上,我有不同版本的 iOS 客户端连接到运行 phonegap 的同一网页。如果检测到插件,我想在网站上启用一项功能。如果旧版本的客户端没有插件,我希望禁用该功能。
  • @AndrewLively,我无法让 try/catch 工作。当cordova JS代码尝试执行插件时会产生404,但没有抛出异常

标签: cordova phonegap-plugins


【解决方案1】:

对于一个相当简单(和更清洁)的解决方案,您也可以使用此方法:

var plugins = cordova.require("cordova/plugin_list").metadata;

你会得到一个像这样的对象:

{
    'cordova-plugin-network-information': "1.0.0",
    'cordova-plugin-whitelist': "1.0.0"
}

作为任何普通变量,您可以检查它是否已定义:

if (typeof plugins['cordova-plugin-whitelist'] === "undefined")
{
    // This plugin is missing
}

【讨论】:

    【解决方案2】:

    您可以在尝试访问插件之前执行 100 毫秒的 setTimeout,并在插件成功/失败时取消超时。如果超时触发 - 插件未安装。

    【讨论】:

      【解决方案3】:

      这并不完全安全,但您应该能够阅读 config.xml 并搜索插件配置以查看插件是否已注册:

      var myPluginName = "MyPluginName";
      var myPluginExists = false;
      $.ajax(
          {
              url: "../config.xml",
              success: 
                  function(configXML)
                  {
                      myPluginExists = (configXML.indexOf(myPluginName) > 0);
                  },
              dataType: "text"
      });
      

      【讨论】:

      • 对不起,我不认为我之前指定了这一点,但我正在寻找当 JS 在远程服务器上运行并且无权访问项目。
      • 不,你指定了。我只是不明白你在说什么。我假设您说的是设备上的 JS,因为如果 JS 在服务器上,您无论如何都无法访问 cordova.exec。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2012-10-25
      相关资源
      最近更新 更多