我正在尝试将基于Cordova 2.0构建的iOS应用升级到2.7版。
它基本上是一个指向远程搜索引擎的欢迎屏幕(请保留关于应用有效性和可能的批准的评论,因为我们已经过去了),我们使用ChildBrowser插件启用了打开链接子浏览器,以免将用户陷入Cordova webview。
Cordova 2.7有一个名为InAppBrowser的功能我希望使用而不是ChildBrowser。除了缺少在Safari中打开的按钮外,InAppBrowser的功能基本相同。
现有应用程序的远程网页包括Cordova JS(以及ChildBrowser插件的网页),它可以在子浏览器中打开链接。
我的测试Cordova 2.7应用程序在从远程网页加载时似乎没有正确加载Cordova JS。
我尝试在嵌入式启动页面和远程启动页面上使用完全相同的HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
</head>
<body>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert("Ready!!");
}
</script>
</body>
</html>
要将此测试作为嵌入式起始页,我将此行放在config.xml
:
<content src="index.html" />
当我运行应用程序时,我立即得到“准备就绪!”警报。
要将此测试作为远程启动页面(我的目标是链接到最终应用程序中的远程页面,我只是将其用作测试的起始页面。结果是如果我从嵌入页面链接,则相同。),我将此行放在config.xml
:
<content src="http://mydomain.com/mobile/index.php" />
当我运行应用程序时,我只是得到空白屏幕而没有警报。
此外,在cordova-2.7.0.js
L. 6255,我改变了
console.log('deviceready has not fired after 5 seconds.');
到
alert('deviceready has not fired after 5 seconds.');
通过该更改,使用远程启动页面运行应用程序会导致空白页面,然后在五秒钟后,我收到警报“设备已经在5秒后未启动”。所以这告诉我Cordova JS没有正确启动。毋庸置疑,我无法让InAppBrowser在远程站点的子浏览器中启动链接,但我可以在嵌入式启动页面上正常工作。
任何人都有任何关于从何而去的想法?这是一个非常简单的例子,所以我假设这是Cordova设置问题或功能的变化。我很感激任何想法,谢谢!
答案 0 :(得分:10)
是的,2.7中的某些内容与我们的cordova-cli工作有关。请参阅:https://issues.apache.org/jira/browse/CB-3029
修复方法是在根文件夹中添加一个名为“cordova_plugins.json”的空文件。
答案 1 :(得分:3)
我遇到了与升级到Cordova 2.7有关的类似问题。但是我的问题是我的所有console.logs在运行应用程序时停止了触发。我无法弄清楚为什么我的生活会发生这种情况。我以为是因为我升级了jquery.mobile。那不是它。然后我认为这是一个.htaccess问题,那也不是。事实证明,正是Cordova 2.7导致了这个问题。
我确实尝试在我的服务器上添加.json文件,但这并没有解决问题。
修复程序进入2.7源代码并注释掉以下代码:
/*comment out this as it is breaking console.logs
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();
*/
通过调用以下函数替换整个块:
finishPluginLoading();
我的日志现在再次运行。我只花了3天时间挠头。
希望这有助于遇到类似问题的人。
答案 2 :(得分:0)
如果您将Cordova嵌入外部网页,则无法从您的混合应用程序中打开InAppBrowser,因此Cordova将无法加载。这是因为InAppBrowser要求Cordova完全加载并初始化,然后才能用于获取远程页面。您需要使用自己的HTML页面,<script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
作为应用的主要入口点。然后,您可以使用InAppBrowser打开远程页面。 (您可以在onDeviceReady()中执行此操作,但不确定它是否会首先“闪存”页面。)我不认为远程页面中应该包含任何Cordova代码。由于同源策略,我不确定是否有可能甚至可以从远程页面与Cordova交互(可能你可以使用InAppBrowser的功能注入“桥接”代码来解决这个问题。)
答案 3 :(得分:0)
正如Shazron所说,问题是文件“cordova_plugins.json”的问题。
要解决不更改代码的问题,可以在根文件夹中创建“cordova_plugins.json”文件,并在此文件中的引号之间插入内容。 例如,我的内容如下:
"Just a dummy file required since Cordova 2.6.0"
答案 4 :(得分:0)
创建包含cordova_plugins.json
的文件{}
。然后转到cordova-2.7.0.js
并对此行require('cordova/channel').onNativeReady.fire();
发表评论,然后在完成开发后,将其添加回来
答案 5 :(得分:0)
如果您使用的是Cordova 5.1.1,并希望在重定向后访问本机功能,那么请复制位于\ platforms \ platform_name \ assets \ www \的cordova.js,cordova_plugins.js和plugins文件夹,并将它们放在服务器上,最后在你的html中引用cordova.js。每个插件添加后,请确保更新这些文件和文件夹。