#android #html #angularjs #cordova #strict
#Android #HTML #angularjs #кордова #строгий
Вопрос:
В настоящее время я разрабатываю приложение для мобильных телефонов с использованием AngularJS и cordova 3.2.
Некоторые из моих игроков сообщают, что приложение не запускается на их устройствах. Эти устройства перечислены ниже.
- optimus p880 (версия Android 4.0.3)
- Lifetab фон Медион (версия Adroid 4.0.3)
- Sony Ericsson Xperia mini pro (Android 4.0.4)
Так что, похоже, это как-то связано с этой версией Android 4.0.3 / 4.
Не запуск означает, что приложение cordova запускается, но что angularjs завершает работу до его запуска, потому что все элементы, к которым ng-cloak
присоединен класс (который в моем случае установлен для полного корневого окна), остаются скрытыми. Таким образом, пользователь ничего не видит.
Проблема в том, что у меня нет ни одного из этих устройств, чтобы протестировать его, но один игрок прислал мне логи своего устройства, сказав
Uncaught SyntaxError: Unexpected strict mode reserved word
С помощью номера строки и имени файла я мог определить, что проблема вызвана приведенным ниже кодом (его из angular.js файл версии v1.2.16 в строке 3878). Проблема, похоже, изложена в заявлении throw err;
(#3878)
function createInternalInjector(cache, factory) {
function getService(serviceName) {
if (cache.hasOwnProperty(serviceName)) {
if (cache[serviceName] === INSTANTIATING) {
throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));
}
return cache[serviceName];
} else {
try {
path.unshift(serviceName);
cache[serviceName] = INSTANTIATING;
return cache[serviceName] = factory(serviceName);
} catch (err) {
if (cache[serviceName] === INSTANTIATING) {
delete cache[serviceName];
}
throw err; /*** THE ERROR APPLIES HERE! **/
} finally {
path.shift();
}
}
}
Я не могу точно сказать, что здесь происходит. Приложения отлично работают на других устройствах и других версиях Android.
Есть ли у кого-нибудь из вас идеи, как я мог бы решить эту проблему для игроков?
Комментарии:
1. Нет идей? Это действительно блокирует меня, и я хотел бы получить решение!
2. Как называются ваши службы? Однажды я получил эту ошибку, когда попытался назвать функцию с помощью зарезервированного (будущего) слова. У вас, вероятно, то же самое. Не удаляйте
'use strict'
директивы только из-за этого.
Ответ №1:
Для нас это происходит только в обычном браузере Android 4.0.4 Galaxy S2 (и веб-просмотр приложения) и может быть устранено путем удаления 'use strict;'
из нашего app.js .
Я отследил код-нарушитель с помощью консоли.регистрация значения fn.toString().substring(0,150)
в angular.js annotate
функция и проверка журналов в Weinre после нажатия about:debug
кнопки в браузере Stock, которая включает консоль в браузере Stock. Может помочь вам отследить проблемную строку в вашем собственном коде. Возможно, не все получают ошибку на annotate()
шаге. Вы должны увидеть строку в журнале консоли.
Galaxy S3 с точно такой же ОС и браузером в порядке… поди разберись.
Все еще ищу способ получить 'use strict';
там и не получить ошибку. Обертывание всего этого в IIFE не помогло, и в этом случае все равно появляется ошибка.
Комментарии:
1. Я пока не нашел решения, я просто удалил
'use strict'
все свои файлы…