AngularJS $ LogProvider抛出非法访问错误

时间:2014-01-17 21:45:22

标签: javascript android angularjs android-webview firefox-os

我有一个使用cordova + AngularJS 1.2.4的移动应用程序。它在我测试的每个平台上都很完美,除了一些Android 2.3.X设备抛出一个神秘的illegal access异常。下面是引发错误的代码部分。准确地说,return logFn.apply(console, args);这一行似乎是罪魁祸首。如果我删除参数args代码工作正常。由于变量args被定义在函数的顶部,所以看起来很奇怪。我不明白究竟是什么导致了这个illegal access错误?有谁有类似的问题?任何想法如何解决它?

ps:请查看内联评论以更好地了解问题。在那里,我调试并报告了一些案例。

    function consoleLog(type) {
      var console = $window.console || {},
          logFn = console[type] || console.log || noop;
      if (logFn.apply) {
        return function() {
          var args = [];
          forEach(arguments, function(arg) {
            args.push(formatError(arg));
            // console.log(typeof arg); -> prints string
            // console.log(arg.toString); -> prints function
            // console.log(arg); -> throws illegal access error
            // console.log(arg.toString()); -> throws illegal access error
          });
          // console.log(args); -> throws illegal access error
          // return logFn.apply(console); -> works fine w/o `args`
          return logFn.apply(console, args); -> throws illegal access error
        };
      }

      // we are IE which either doesn't have window.console => this is noop and we do nothing,
      // or we are IE where console.log doesn't have apply so we log at least first 2 args
      return function(arg1, arg2) {
        logFn(arg1, arg2 == null ? '' : arg2);
      };
    }

1 个答案:

答案 0 :(得分:0)

您发布的代码不是问题所在。这是Angular的内置异常处理。我犯了同样的错误并试图在这里挖掘,但Angular的异常处理工作正常。

但1.2.4中有关于Android 2.3.x和Firefox OS的reported Issue (Github),他们将其修复为1.2.5

也许你应该尝试更高级的AngularJS版本