Java与JavaScript代码互调示例:Android WebView交互实现
在Android混合应用开发中,Java原生代码与JavaScript前端代码的交互是核心环节。本文将分享如何通过WebView配置,实现JS调用Java方法以及Java调用JS函数的两种常见场景,帮助开发者快速打通跨平台通信链路。
JS调用Java代码:注入JS接口
要实现JavaScript直接调用Java方法,需要在WebSettings中开启JavaScript支持,并通过addJavascriptInterface将Java对象暴露给JS环境。
第一步:配置WebView并注入接口
在继承自DroidGap或Activity的主类中,设置WebSettings启用脚本功能,并将当前实例(或特定对象)以别名形式添加到JS上下文。注意,必须确保setJavaScriptEnabled(true)已设置,否则无法交互。
public class CzingLBWebMain extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.loadUrl("file:///android_asset/www/czingIndexHome.html");
WebSettings webSettings = this.appView.getSettings();
// 允许访问文件
webSettings.setAllowFileAccess(true);
// 开启JavaScript支持
webSettings.setJavaScriptEnabled(true);
// 可选配置:禁止缩放、保存密码等
webSettings.setSupportZoom(false);
webSettings.setSavePassword(false);
// 关键步骤:向JS中添加一个Java实例
// "appDownloader"为JS中可调用的对象名,this指代当前Java类
this.appView.addJavascriptInterface(this, "appDownloader");
}
// 供JS调用的Java方法
public void callBackJava() {
// 具体业务逻辑处理
}
}
完成上述配置后,在HTML引用的JS文件中,即可通过window.appDownloader.callBackJava()直接触发Java端的callBackJava方法。
Java调用JS代码:执行JS脚本
当需要从Java后台向JS前端发送数据时,可以利用loadUrl方法执行一段虚拟的JavaScript URL,从而触发JS端定义好的回调函数。
第二步:构造JS调用语句并执行
在Java代码中拼接出符合JavaScript语法的字符串,调用appView.loadUrl发起请求。此方法常用于将后端结果传递给前端进行UI更新或逻辑处理。
// 假设要从Java获取的数据
String resUrl = "https://example.com/data";
String resId = "12345";
// 构造JavaScript调用字符串
// 注意:如果参数包含特殊字符,需进行编码处理以防止语法错误
String callBackScript = "javascript:callBackService('" + resUrl + "','" + resId + "')";
// 在WebView中执行该JS语句
this.appView.loadUrl(callBackScript);
对应地,JS侧需要预先定义好callBackService函数:
function callBackService(url, id) {
console.log("Received URL:", url);
console.log("Received ID:", id);
// 处理接收到的数据
}
注意事项与排错
- 线程安全:从JS调用Java方法通常在非UI线程执行,若需更新UI,请通过
runOnUiThread或Handler切换回主线程。 - 安全性:在高版本Android系统中,建议对
@JavascriptInterface暴露的方法添加明确注解,防止潜在的安全漏洞。 - 参数传递:在Java调用JS时,若参数包含空格或单引号,建议使用
URLEncoder.encode进行编码,并在JS端解码,避免字符串截断导致的JS语法错误。
以上就是Java与JavaScript代码在Android WebView中互调的详细内容,更多关于Android混合开发技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













