cordova_plugins.json文件是用来做什么的?Cordova在初始化时请求它。

33

我正在尝试调试cordova_plugins.json文件的用途?

迄今为止,我已经使用了多个插件,但我从未与此文件交互过。我想弄清楚为什么cordova在初始化时会对该文件进行xhr请求。

当我查看控制台时,每次在Chrome中测试我的应用程序时都会看到这个404错误,并想了解为什么需要这个文件。

8个回答

14

看起来是在Cordova 2.6.0中引入的一个功能,至少我在这个版本中才注意到。 目前我找不到任何文档,也没有太多细节,但现在我通过在项目根目录添加一个虚拟cordov_plugins.json文件来解决了404问题。

由于它需要一个有效的json文件,因此我向该文件添加了以下内容:"只是Cordova 2.6.0需要的一个虚拟文件"


11

看起来这是一个已知的问题,可以在这里讨论: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()的调用,将解决问题。


你能否把你的回答说得更清楚一些,因为现在不是很明白。请说明在哪里以及如何替换 finishPluginLoading。你能具体点吗? - Lali Pali
1
@LaliPali,很明显。删除那整个代码部分并用finishPluginLoading()替换它。 - Danation
创建一个虚拟的cordova_plugins.json文件不起作用的原因之一,至少在IIS 7+上,是你必须明确地将MIME类型映射添加到IIS中,否则它会阻止请求。 - Alan McBee

9

Adobe的Filip Maj在其他地方表示,这是由于(到目前为止)部分实现的插件工具。 在Cordova的未来版本中,插件工具将自动生成cordova_plugins.json文件。

目前,他表示完全可以忽略404错误。 如果您觉得它影响了您的应用程序,您应该向Cordova提交错误报告。

请注意,如果您自己添加虚拟文件,可能会影响插件的集成。


嘿,有人验证过最新发布的2.8.0版本是否解决了这个问题吗? - netalex

6

2
为了摆脱无限循环,我不得不从我的index.html文件中删除cordova-2.7.0.js文件的<script>包含。显然Ripple会动态加载它。然后我还必须通过Ripple这样访问该网站:http://localhost/my_app/index.html?enableripple=cordova-2.7.0。 - tyler.frankenstein

2

该文件在以前的 Cordova/PhoneGap 版本中表示一个错误/漏洞,而 nurieta 建议的修复确实解决了其不存在时引发的(无害)错误。该文件的继任者现在完全由 Cordova/PhoneGap CLI 创建和处理,并位于 /myapp/platforms/#platform#/www/cordova_plugins.js 中。

总之,虽然该文件仍然存在,但自 Cordova 3.0 起,这已不再是一个问题。


1
我其实将这个文件模拟成了一个空的json文件,内容为"{}",而且使用cordova 2.6后问题似乎得到解决。不会再有难看的404错误,并且cordova工作正常。
编辑:你可以从cordova中完全删除进行ajax请求的代码,一切都将正常工作。

0

您可以在这里 了解更多

SDK / XDK 中的位置如下:xdk-new\xdk\components\server\emulator\resources\cordova_plugins.json


-2

你在使用Sencha Touch吗?

你可以忽略这个错误,但是如果你想将应用程序打包为iOS版本,那么你将无法实现。我通过回退到cordova-2.5.0.js来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接