Angularjs抛出"意外的严格模式保留字"这导致应用程序崩溃

时间:2014-06-23 16:02:09

标签: android html5 angularjs cordova strict

我目前正在使用angularJS和cordova 3.2开发移动电话应用程序。

我的一些玩家报告说,应用程序没有在他们的设备上启动。此设备如下所列。

  • optimus p880(Android版本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版本上运行良好。

你们有没有人知道如何为球员解决这个问题?

1 个答案:

答案 0 :(得分:1)

对于我们来说,这只是在Android 4.0.4 Galaxy S2 Stock浏览器(以及应用网络视图)上引发,可以通过从我们的app.js中删除'use strict;'来解决。

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

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

仍然在寻找一种方法让'use strict';在那里并没有得到错误。在IIFE中包装整个事情并不能解决问题,但在这种情况下仍会出现错误。