检测Cordova插件是否存在

检测Cordova插件是否存在,cordova,phonegap-plugins,Cordova,Phonegap Plugins,有没有办法判断在Cordova 2.5.0中是否可以调用特定的Cordova插件Cordova.exec接受一个successFunction和一个failFunction但是只有在本机代码执行时才会调用failFunction。如果接收函数不存在,是否有方法接收错误或回调?我正在寻找一个解决方案,它可以将删除URL加载到WebView中 这不是完全安全的,但您应该能够读取config.xml并搜索插件配置,以查看插件是否已注册: var myPluginName = "MyPluginName

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


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

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

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

对于更简单(更干净)的解决方案,您也可以使用以下方法:

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
}

我知道你在试图检测它是否存在,但你能不能用一个try-catch来达到同样的效果?在try中调用插件,如果插件不存在,则将执行catch中的代码。为此,您需要开发另一个插件来检查是否存在其他插件,只需调用smth-like-PluginChecker,查看您请求的插件是否存在,或者是否需要此插件?ios还是android?理想情况下,我希望两者都能使用,但ios是优先考虑的。基本上,我有不同版本的iOS客户端连接到同一个网页,上面运行着phonegap。如果检测到插件,我想在网站上启用一个功能。如果旧版本的客户端没有插件,我希望该功能被停用。@andrewly,我无法使try/catch正常工作。cordova JS代码尝试执行插件时会生成404,但不会出现异常抱歉,我不认为我之前指定了这个,但我正在寻找当JS在远程服务器上运行且无法访问项目中的文件时可以工作的东西。不,是您指定的。我只是不明白你的意思。我假设你说的是设备上的JS,因为如果JS在服务器上,你无论如何都无法访问cordova.exec。