2

我正在构建一个 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()但我仍然有同样的错误请帮助,因为我被卡住了!这将非常有帮助。

谢谢

4

1 回答 1

1

有一个类似的问题,我正在努力解决它,最后我发现想出了一个“丑陋”但有效的解决方案:

不要从 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) 在名为 jsi_getImage 的 Javascript 函数中,再次调用 send_picture(),如:

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

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

希望能帮助到你

于 2014-02-04T22:58:02.367 回答