Cordova s​​endJavascript不适用于android processMessage失败:错误:未定义:10

时间:2013-09-17 01:25:57

标签: javascript android cordova

我正在构建一个phonegap-android应用程序,作为流程的一部分,我使用javascriptInterface从我的javascript端调用一个活动

这看起来像

public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        super.init();
        appView.addJavascriptInterface(this, "Android");

        super.loadUrl(Config.getStartUrl());


}

现在我还想将我的活动中的一些数据发送回cordova webview。

我在我的javascript文件中定义了一个我想调用的函数

function jsi_getData(data) {
     console.log("JSI GET IMAGE INVOKED ON JAVASCRIPT SIDE");
     alert(data);
 }

在我的android代码中,在onActivityResult中,我正在调用这个javascript函数

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if(requestCode == 12321){
             //do some work

           Log.i("MAIN_ACTIVITY", "***************  received data"+ data);
            appView.sendJavascript("javascript:jsi_getImage("+data+");");

        }
    }

这给了我以下错误

09-16 18:18:27.211: I/Web Console(28991): processMessage failed: Message: Jjavascript:jsi_getData('data');:1034
09-16 18:18:27.211: I/Web Console(28991): processMessage failed: Error: ReferenceError: jsi_getImage is not defined:1035
09-16 18:18:27.211: I/Web Console(28991): processMessage failed: Stack: ReferenceError: jsi_getImage is not defined
09-16 18:18:27.211: I/Web Console(28991):     at eval (eval at processMessage (file:///android_asset/www/js/libs/cordova.js:996:26), <anonymous>:1:1)
09-16 18:18:27.211: I/Web Console(28991):     at processMessage (file:///android_asset/www/js/libs/cordova.js:996:13)
09-16 18:18:27.211: I/Web Console(28991):     at Function.androidExec.processMessages (file:///android_asset/www/js/libs/cordova.js:1063:13)
09-16 18:18:27.211: I/Web Console(28991):     at pollOnce (file:///android_asset/www/js/libs/cordova.js:933:17):1036
09-16 18:18:27.481: I/Adreno200-EGLSUB(28991): <ConfigWindowMatch:2087>: Format RGBA_8888.

我还将appView.sendJavascript()更改为this.sendJavascript(),但我仍然遇到同样的错误 请帮忙,因为我被卡住!这将非常有用。

由于

1 个答案:

答案 0 :(得分:1)

有一个类似的问题我和它一起去了,最后我找到了一个“UGLY”但工作的解决方案:

不是从onActivityResult传回数据,而是执行以下操作。

1)在JAVA中定义一个全局变量,并将结果存储在该全局变量

2)在onActivityResult中执行此操作:

Log.i("MAIN_ACTIVITY", "***************  received data"+ data);
appView.sendJavascript("jsi_getImage();");

3)在JAVA中定义另一个函数:

public String send_picture() {
return previously_defined_global_variable;
}

4)在你的Javascript函数jsi_getImage中,再调用send_picture(),如:

function jsi_getImage(){
alert(window.MainActivity.send_picture());
}

确保您只在Java和Javascript之间发送字符串数据(BASE64编码图像)

希望有所帮助