从 java 调用 java 脚本后显示空白页

show blank page after call javascript from java

我用离子框架制作了一个应用程序。我想使用从本机 java 调用的 java 脚本函数更新我的 html 进度条,而我的 java 运行 在 asynctask 上。
首先,这是我的 angular 控制器:

.controller('DMCtrl', function($scope) {
    $scope.updateProgress = function(name,progress){
        loader.setProgress(progress); //loader is my progress bar in view
    };
});

这是我 java 调用 updateProgress :

private void updateProgress(final String name, final int progress, final int max){
    mGap.runOnUiThread(new Runnable(){

        @Override
        public void run() {
            double data = (double)progress/(double)max;
            mGap.loadUrl("javascript: updateProgress('"+name+"',"+"'"+data+"');"); //mGap is my cordova activity
        }

    });
}

我在异步任务中调用该方法并成功运行。但是 logcat 显示错误,我的 java 脚本函数 updateProgress 未定义,我的应用程序进入黑屏。它看起来像是调用空白页而不是调用我的 javascript 函数。这里是日志:

04-01 14:43:20.197: I/DataAdapter(12328): Start getPXPreservedList(52025900) >> Wed Apr 01 14:43:20 GMT+07:00 2015
04-01 14:43:20.198: E/dalvikvm(12328): [DVM] mmap return base = 48159000
04-01 14:43:20.211: D/dalvikvm(12328): GC_FOR_MALLOC freed 398K, 60% free 3101K/7687K, external 0K/2560K, paused 14ms
04-01 14:43:20.215: I/System.out(12328): [socket][2] connection 192.168.1.57/192.168.1.57:8080;LocalPort=47448(20000)
04-01 14:43:20.215: I/System.out(12328): 192.168.1.57/192.168.1.57:8080(20000)
04-01 14:43:20.215: I/OSNetworkSystem(12328): OSNetworkSystem_connect fd=-1; timeout = 20000
04-01 14:43:20.217: I/System.out(12328): Socket[addr=/0.0.0.0,port=0,localport=47448]
04-01 14:43:20.217: I/System.out(12328): [socket][/192.168.1.50:47448]
04-01 14:43:20.283: I/System.out(12328): close [socket][/0.0.0.0:47448]
04-01 14:43:20.338: D/CordovaWebView(12328): >>> loadUrl(javascript: updateProgress('pxconfig','0.13636363636363635');)
04-01 14:43:20.338: D/PluginManager(12328): init()
04-01 14:43:20.344: I/webkit/webview(12328): Webview.loadUrl() this=org.apache.cordova.CordovaWebView@40534fc0url: javascript: updateProgress('pxconfig','0.13636363636363635');
04-01 14:43:20.347: D/CordovaLog(12328): : Line 1 : Uncaught ReferenceError: updateProgress is not defined
04-01 14:43:20.347: E/Web Console(12328): Uncaught ReferenceError: updateProgress is not defined at :1

我的建议是发出一个事件并在 Ionic 中对该事件执行操作。应该会有帮助jsfiddle.net/hxtpoe/uvs103gy

angular.element(document).ready(function () {
            angular.bootstrap(document, ['App']);
});

angular.module('App', [])
  .controller('Controller', ['$document', '$scope', function($document, $scope) {
      $scope.user = {'name' : "Hello"};
      $document.on('myevent', function() {
          $scope.$apply(
              function() {
                     $scope.user.name = "hello my event!";
              });

      })
  }]);

// end of angular/ionic app

var button = document.getElementById("emit");

button.onclick = function() {
    var event = new CustomEvent("myevent", {});
    document.dispatchEvent(event);
};