检测 Cordova 插件是不是存在

Posted

技术标签:

【中文标题】检测 Cordova 插件是不是存在【英文标题】: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,但没有抛出异常 【参考方案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。

以上是关于检测 Cordova 插件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

是否有使用 UIWebView API 的 cordova 插件列表?

如何使用cordova插件中downloader

Cordova 相机插件

在 Cordova 中检测倒置屏幕

Cordova:有没有办法检测语音听写是不是在 iOS 上结束

phonegap pushNotifications 插件是不是适用于 Cordova 构建?