gpt4 book ai didi

javascript - Cordova s​​endJavascript 不适用于 android processMessage 失败 : Error: not defined:10

转载 作者:行者123 更新时间:2023-11-29 01:49:51 25 4
gpt4 key购买 nike

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

这看起来像

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

super.loadUrl(Config.getStartUrl());


}

现在我还想将我的 Activity 中的一些数据发送回 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() 但我仍然有同样的错误请帮忙,因为我真的被卡住了!这将非常有帮助。

谢谢

最佳答案

有一个类似的问题,我一直在思考它,最后我发现想出了一个“丑陋”但可行的解决方案:

不要将数据从 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 编码)

希望对你有帮助

关于javascript - Cordova s​​endJavascript 不适用于 android processMessage 失败 : Error: not defined:10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com