检测 Cordova 插件是不是存在
Posted
技术标签:
【中文标题】检测 Cordova 插件是不是存在【英文标题】:Detect if Cordova plugin exists检测 Cordova 插件是否存在 【发布时间】:2013-07-26 00:47:35 【问题描述】:有没有办法判断特定的 Cordova 插件是否可以在 Cordova 2.5.0 中调用? Cordova.exec
接受 successFunction
和 failFunction
但只有在本机代码执行时才会调用 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 插件列表?