我正在构建一个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()
,但我仍然遇到同样的错误
请帮忙,因为我被卡住!这将非常有用。
由于
答案 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编码图像)
希望有所帮助