Angularjs 抛出"Unexpected strict mode reserved word"导致应用程序崩溃



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

我的一些玩家报告说,应用程序不能在他们的设备上启动。这些设备列在下面。
    optimus p880 (Android Version 4.0.3)
  • Lifetab von Medion (android Version 4.0.3)
  • Sony Ericsson Xperia mini pro (Android 4.0.4)

所以这似乎与Android版本4.0.3/4有关。

Not starting意味着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版本上运行良好。

你们有谁知道我该如何为玩家解决这个问题吗?

对于我们来说,这只在Android 4.0.4 Galaxy S2 Stock Browser(和app web view)上抛出,可以通过从我们的app.js中删除'use strict;'来解决。

我通过控制台跟踪了违规代码。在angular.js的annotate函数中记录fn.toString().substring(0,150)的值,在Stock Browser中点击about:debug后,在Weinre中查看日志,打开Stock Browser的控制台。可以帮助您在自己的代码中跟踪有问题的行。可能不是每个人都在annotate()步骤中得到错误。您应该在控制台日志中看到这一行。

Galaxy S3使用完全相同的操作系统和浏览器是好的…图。

仍在寻找一种方法,有'use strict';在那里,而不是得到错误。在IIFE中包装整个东西并没有达到这个目的,在这种情况下仍然会出现错误。

相关内容

最新更新