我目前正在使用angularJS和cordova 3.2开发移动电话应用程序。
我的一些玩家报告说,应用程序没有在他们的设备上启动。此设备如下所列。
所以它似乎以某种方式与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版本上运行良好。
你们有没有人知道如何为球员解决这个问题?
答案 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中包装整个事情并不能解决问题,但在这种情况下仍会出现错误。