【问题标题】:Angularjs throws "Unexpected strict mode reserved word" which causes application to crashAngularjs 抛出“意外的严格模式保留字”,导致应用程序崩溃
【发布时间】:2014-06-23 16:02:09
【问题描述】:

我目前正在使用 angularJS 和 cordova 3.2 开发一个手机应用程序。

我的一些玩家报告说,应用程序没有在他们的设备上启动。下面列出了这些设备。

  • 擎天柱 p880(安卓版本 4.0.3)
  • Lifetab von Medion(Adroid 版本 4.0.3)
  • 索尼爱立信 Xperia mini pro (Android 4.0.4)

所以它似乎与那个 Android 版本 4.0.3/4 有某种联系。

未启动意味着,cordova 应用程序正在启动,但 angularjs 在启动之前崩溃,因为附加了 ng-cloak 类的所有元素(在我的情况下是为完整的根窗口设置的)仍然隐藏.所以用户什么都看不到。

问题是,我没有任何设备来测试它,但一位玩家确实向我发送了他设备的日志,说

Uncaught SyntaxError: Unexpected strict mode reserved word

根据我可以确定的行号和文件名,问题是由下面的代码引起的(它来自第 3878 行的 angular.js v1.2.16 文件)。该问题似乎适用于声明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 版本上运行良好。

你们中有人知道我可以如何为玩家解决这个问题吗?

【问题讨论】:

  • 没有想法?它对我来说真的很困难,我想得到一个解决方案!
  • 你们的服务名称是什么?当我尝试使用(未来的)保留字命名函数时,我得到了这个错误。你可能也有同样的情况。不要不要仅仅因为这个而删除'use strict'指令。

标签: android html angularjs cordova strict


【解决方案1】:

对我们来说,这仅在 Android 4.0.4 Galaxy S2 股票浏览器(和应用程序 Web 视图)上抛出,可以通过从我们的 app.js 中删除 'use strict;' 来解决。

我通过 console.logging angular.js annotate 函数中的值 fn.toString().substring(0,150) 来跟踪违规代码,并在股票浏览器中点击 about:debug 后检查 Weinre 中的日志,这会在股票浏览器。可能会帮助您在自己的代码中跟踪有问题的行。可能不是每个人都在annotate() 步骤中遇到错误。您应该会在控制台日志中看到该行。

具有完全相同的操作系统和浏览器的 Galaxy S3 很好...去看看。

仍在寻找一种方法让'use strict'; 出现并且不会出现错误。将整个东西包装在 IIFE 中并没有解决问题,在这种情况下仍然会出现错误。

【讨论】:

  • 目前我还没有找到解决方案,我只是在我所有的文件中删除了'use strict'...
猜你喜欢
  • 2017-11-03
  • 2017-03-15
  • 2020-04-28
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
相关资源
最近更新 更多