Angularjs выдает «Неожиданное зарезервированное слово строгого режима», что приводит к сбою приложения

#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' все свои файлы…