我有一个使用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);
};
}
答案 0 :(得分:0)
您发布的代码不是问题所在。这是Angular的内置异常处理。我犯了同样的错误并试图在这里挖掘,但Angular的异常处理工作正常。
但1.2.4中有关于Android 2.3.x和Firefox OS的reported Issue (Github),他们将其修复为1.2.5
也许你应该尝试更高级的AngularJS版本