Ответ 1
Да, что-то сломалось в 2.7 - связано с нашей работой cordova-cli. См.: https://issues.apache.org/jira/browse/CB-3029
Исправление состоит в том, чтобы добавить в корневую папку пустой файл с именем cordova_plugins.json.
Я пытаюсь обновить приложение iOS, основанное на Cordova 2.0 до версии 2.7.
В основном это приветственный экран, который указывает на удаленную поисковую систему (пожалуйста, воздержитесь от комментариев о действительности приложения и вероятном одобрении, поскольку мы прошли мимо этого), и мы использовали ChildBrowser, чтобы разрешить открытие ссылок в дополнительном браузере, чтобы не улавливать пользователя в веб-просмотре Cordova.
Кордова 2.7 имеет функцию под названием InAppBrowser Я надеюсь использовать вместо ChildBrowser. InAppBrowser делает практически то же самое, кроме пропущенной кнопки для открытия в Safari.
Существующие удаленные веб-страницы приложений включают в себя Cordova JS (а также плагин ChildBrowser), и он отлично работает для открытия ссылок в под-браузере.
Мой тест Приложение Cordova 2.7, похоже, не правильно загружает Кордову 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.');
С этим изменением запуск приложения с помощью стартовой страницы пуста приводит к пустой странице, а затем через пять секунд я получаю предупреждение: "deviceready не запускается через 5 секунд". Так что это говорит мне, что Кордова JS не работает правильно. Излишне говорить, что я не могу заставить InAppBrowser запускать ссылки в дополнительном браузере на удаленном сайте, но я могу заставить его работать отлично на встроенной стартовой странице.
У кого-нибудь есть идеи, куда идти дальше? Это довольно простой пример, поэтому я предполагаю, что это проблема настроек Кордовы или изменение функциональности. Я ценю любые мысли, спасибо!
Да, что-то сломалось в 2.7 - связано с нашей работой cordova-cli. См.: https://issues.apache.org/jira/browse/CB-3029
Исправление состоит в том, чтобы добавить в корневую папку пустой файл с именем cordova_plugins.json.
У меня была аналогичная проблема, связанная с обновлением до Кордовы 2.7. Однако моя проблема заключалась в том, что мои консольные инструменты перестали стрелять при запуске приложения. Я не мог понять, почему для меня это происходило. Я думал, это потому, что я обновил 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 дня, царапая мне голову.
Надеюсь, что это поможет кому-то с аналогичной проблемой.
Если вы вставляете Кордову на внешнюю веб-страницу, не будет возможности открыть InAppBrowser из вашего гибридного приложения, поэтому Кордова не сможет загрузить. Это связано с тем, что InAppBrowser требует, чтобы Кордова была полностью загружена и инициализирована, прежде чем ее можно будет использовать для получения удаленной страницы. Вам нужно использовать свою HTML-страницу, с помощью <script type="text/javascript" src="http://mydomain.com/mobile/cordova-2.7.0.js"></script>
в качестве основной точки входа для вашего приложения. Затем вы можете использовать InAppBrowser, чтобы открыть удаленную страницу. (Возможно, вы могли бы сделать это в onDeviceReady(), но не уверены, что он сначала "запустит" страницу.) Я не думаю, что на удаленной странице должен быть какой-либо код Кордовы. Я не уверен, что можно было бы даже взаимодействовать с Кордовой с удаленной страницы из-за той же политики происхождения (возможно, вы могли бы использовать функции InAppBrowser для ввода кода "моста", хотя обойти это.)
Как отметил Шазрон, проблема связана с файлом "cordova_plugins.json".
Чтобы решить проблему, не меняя код, вы можете создать файл "cordova_plugins.json" в корневой папке и вставить содержимое между кавычками внутри этого файла. Например, шахта имеет следующее содержание:
"Just a dummy file required since Cordova 2.6.0"
создайте файл cordova_plugins.json
, содержащий {}
. затем перейдите к cordova-2.7.0.js
и прокомментируйте эту строку require('cordova/channel').onNativeReady.fire();
, а затем, когда это будет сделано, добавьте ее обратно
Как и я, если вы используете Cordova 5.1.1 и хотите получить доступ к встроенным функциям после перенаправления, тогда скопируйте папку cordova.js, cordova_plugins.js и плагинов, которая находится в\platform\имя_панели\assets\www\и поместит их на сервер, наконец, ссылку cordova.js внутри вашего html. После каждого добавления плагина обязательно обновите эти файлы и папку.