我正在尝试调试cordova_plugins.json文件的用途?
迄今为止,我已经使用了多个插件,但我从未与此文件交互过。我想弄清楚为什么cordova在初始化时会对该文件进行xhr请求。
当我查看控制台时,每次在Chrome中测试我的应用程序时都会看到这个404错误,并想了解为什么需要这个文件。
我正在尝试调试cordova_plugins.json文件的用途?
迄今为止,我已经使用了多个插件,但我从未与此文件交互过。我想弄清楚为什么cordova在初始化时会对该文件进行xhr请求。
当我查看控制台时,每次在Chrome中测试我的应用程序时都会看到这个404错误,并想了解为什么需要这个文件。
看起来是在Cordova 2.6.0中引入的一个功能,至少我在这个版本中才注意到。 目前我找不到任何文档,也没有太多细节,但现在我通过在项目根目录添加一个虚拟cordov_plugins.json文件来解决了404问题。
由于它需要一个有效的json文件,因此我向该文件添加了以下内容:"只是Cordova 2.6.0需要的一个虚拟文件"
看起来这是一个已知的问题,可以在这里讨论:here
对于我来说,创建一个虚拟的JSON文件并没有解决问题...实际上,应该移除cordova-2.7.0.js末尾的整个代码块。
// Try to XHR the cordova_plugins.json file asynchronously.
try { // we commented we were going to try, so let us actually try and catch
var xhr = new context.XMLHttpRequest();
xhr.onload = function() {
// If the response is a JSON string which composes an array, call handlePluginsObject.
// If the request fails, or the response is not a JSON array, just call finishPluginLoading.
var obj = this.responseText && JSON.parse(this.responseText);
if (obj && obj instanceof Array && obj.length > 0) {
handlePluginsObject(obj);
} else {
finishPluginLoading();
}
};
xhr.onerror = function() {
finishPluginLoading();
};
xhr.open('GET', 'cordova_plugins.json', true); // Async
xhr.send();
}
catch(err){
finishPluginLoading();
}
将其替换为对finishPluginLoading()的调用,将解决问题。
Adobe的Filip Maj在其他地方表示,这是由于(到目前为止)部分实现的插件工具。 在Cordova的未来版本中,插件工具将自动生成cordova_plugins.json文件。
目前,他表示完全可以忽略404错误。 如果您觉得它影响了您的应用程序,您应该向Cordova提交错误报告。
请注意,如果您自己添加虚拟文件,可能会影响插件的集成。
我确认Francis的答案,并指出在2.7版本中,如果插入一个虚拟文件,有时会因错误"processMessage failed: invalid message:"(行cordova-2.7.0.js:971)而开始无限循环。保留404错误似乎确实更安全。(参考:https://groups.google.com/forum/?fromgroups#!topic/phonegap/slbvvtEw0aw)
该文件在以前的 Cordova/PhoneGap 版本中表示一个错误/漏洞,而 nurieta 建议的修复确实解决了其不存在时引发的(无害)错误。该文件的继任者现在完全由 Cordova/PhoneGap CLI 创建和处理,并位于 /myapp/platforms/#platform#/www/cordova_plugins.js 中。
总之,虽然该文件仍然存在,但自 Cordova 3.0 起,这已不再是一个问题。
您可以在这里 了解更多。
SDK / XDK 中的位置如下:xdk-new\xdk\components\server\emulator\resources\cordova_plugins.json
你在使用Sencha Touch吗?
你可以忽略这个错误,但是如果你想将应用程序打包为iOS版本,那么你将无法实现。我通过回退到cordova-2.5.0.js来解决了这个问题。
finishPluginLoading
。你能具体点吗? - Lali Pali