Javascript 异步+;单击爆破+;科尔多瓦+;Android Galaxy S4=意外退出

Javascript 异步+;单击爆破+;科尔多瓦+;Android Galaxy S4=意外退出,javascript,android,asynchronous,cordova,samsung-mobile,Javascript,Android,Asynchronous,Cordova,Samsung Mobile,在运行安卓4.2.2的Galaxy S4上运行时,退出(以“哦,嘿,我崩溃了,我要离开这里!”的方式)。它在我测试过的其他设备上运行良好。例如,运行Android 4.1.2的Galaxy Note II就没有问题 www目录也可以在浏览器中正常工作,包括S4/Android 4.2.2设备上的浏览器 因此,该错误似乎只在以下代码出现时发生: 作为Cordova应用程序运行 在运行Android 4.2.2的Galaxy S4上 复制行为的步骤 克隆 使用Cordova创建Android可执

在运行安卓4.2.2的Galaxy S4上运行时,退出(以“哦,嘿,我崩溃了,我要离开这里!”的方式)。它在我测试过的其他设备上运行良好。例如,运行Android 4.1.2的Galaxy Note II就没有问题

www目录也可以在浏览器中正常工作,包括S4/Android 4.2.2设备上的浏览器

因此,该错误似乎只在以下代码出现时发生:

  • 作为Cordova应用程序运行
  • 在运行Android 4.2.2的Galaxy S4上
复制行为的步骤
  • 克隆
  • 使用Cordova创建Android可执行文件。安装了
    cordova
    命令行工具和Android SDK后:
    • cordova平台添加android
    • cordova build
  • 将生成的APK安装到运行Android 4.2.2的Galaxy S4上。如果你没有一个,你可以免费测试一个
  • 启动应用程序
  • 触摸应用程序主屏幕上的文本
  • 等待几秒钟,应用程序将退出
  • 在我测试过的所有其他内容上,它加载颜色列表内容,这是预期的行为

    所以,我的问题是:如何解决这个问题,使它不会崩溃?或者我该如何调试它

    相关代码 这些文件都在回购协议中,但如果您不想单击,请点击:

    index.html list.js 日志 这会显示在Android日志中,至少在使用:

    附加说明
    我用科尔多瓦3.1.0试过了。我还使用cordova-3.2.0-dev.jar进行了尝试,它是从commit 28c41294bba746c75beae0ab26a42c8412cc665a编译而来的(最新的commit to master截至2013年10月20日,即今天)。行为没有改变——该应用程序仍然意外退出。

    这是S4上三星版本的Android 4.2.2 Webview中的一个错误。当S4升级到Android 4.3时,问题就消失了。有可能的解决办法(UA嗅探出现在脑海中,但这让我很难过——但您可以忽略S4/4.2.2中的点击破坏)。但解决方案确实掌握在三星手中


    有关详细信息,请参阅。

    您可能需要找出一个错误以获得有关此问题的帮助(但谁知道呢)。你可以远程调试以获取更多信息,否则我可能会开始查找日志文件。这一点很好。我在问题的底部添加了Android日志中看似相关的内容。至于调试,我尝试了调试,
    $timeout()
    调用中的回调永远不会执行。除此之外,一切正常。当然,它可以在其他设备上正常工作-/根据你的日志,我找到了一些相关的东西,但不确定你还能做些什么?为了测试的目的,你能把phonegap从等式中去掉吗?我删除了phonegap并用Cordova编译,应用程序仍然崩溃。所以我更新了。我可以试着去除科尔多瓦,但那太令人畏惧了。尽管如此,我仍然有足够的理由向ApacheCordova项目提交一个bug,如果目前没有人对该项目有任何想法或周期,那么就自己开始调试它。我期待一个学习曲线…我认为你现在比我的工资等级高。。。祝你好运,让世界知道事情的进展。我以前没有听说过科尔多瓦,但它看起来非常棒,如果能使用它就好了。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Galaxy S4 + Android 4.2.2 + Cordova Crash</title>
    
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
    </head>
    <body>
        <div id="ng-app" data-ng-app="main">
    
            <!-- Begin Templates -->
            <script type="text/ng-template" id="main">
                <a ng-click="showList()">On Galaxy S4, touch here, wait a few seconds, and the app will crash.</a>
            </script>
    
            <script type="text/ng-template" id="list">
            <progress data-ng-show="loading"></progress>
            <ol data-ng-hide="loading">
                <li data-ng-repeat="color in colors">
                    {{color.name}}
                </li>
            </ol>
            </script>
            <!-- End Templates -->
    
            <div data-ng-view=""></div>
        </div>
        <script src="js/angular.js"></script>
        <script src="js/angular-mobile.js"></script>
        <script src="js/modules/main.js"></script>
        <script src="js/modules/list.js"></script>
    </body>
    </html>
    
    (function () {
        'use strict';
        angular.module('main', ['ngMobile','list'])
        .config(['$routeProvider', function ($routeProvider) {
            $routeProvider
            .when('/', {templateUrl: 'main', controller: 'mainController'})
            .otherwise({redirectTo: '/'});
        }]).
        controller('mainController', ['$scope', '$location', function ($scope, $location) {
            $scope.showList = function () {
                $location.path('/list');
            };
        }]);
    }());
    
    (function () {
        'use strict';
        angular.module('list', [])
        .config(['$routeProvider', function ($routeProvider) {
            $routeProvider
            .when('/list', {templateUrl: 'list', controller: 'listController'});
        }])
        .controller(
            'listController',
            ['$scope', '$timeout', function ($scope, $timeout) {
                $scope.loading = true;
    
                var callback = function () {
                    $scope.loading = false;
                    $scope.colors = [
                        {name: 'Almost Blue'},
                        {name: 'Kind Of Blue'},
                        {name: 'Totally Not Blue'}
                    ];
                };
    
                // Using $timeout to sort of fake an XHR just to rule out XHR as a cause
                $timeout(callback, 500);
            }]
        );
    }());
    
    ERROR|10-19 03:39:49.448|6938|6938||CallbackProxy|UPDATE_URL
    ASSERT|10-19 03:39:49.493|6938|6953||libc|Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 6953 (WebViewCoreThre)