在 Android 中,WebView 与 Native(Java/Kotlin)通信主要有以下几种方式,按使用频率从高到低说明:
addJavascriptInterface(最常用)把 Native 对象暴露给 JS。
Kotlin 示例
class JSBridge {
@JavascriptInterface
fun showToast(msg: String) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
}
}
webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(JSBridge(), "NativeBridge")
JS 调用
NativeBridge.showToast("Hello from JS");
✅ 优点:简单
⚠️ 注意:Android 4.2 以下有安全漏洞,必须 @JavascriptInterface
通过伪造请求让 Native 拦截。
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
if (url?.startsWith("myapp://") == true) {
// 解析参数
return true
}
return false
}
}
JS 调用
location.href = "myapp://action?param=1";
✅ 兼容性好
❌ 只能传字符串,不适合大数据
console.log / alert较少用,常用于调试或简单通信。
evaluateJavascript(推荐)webView.evaluateJavascript("jsFunction('hello')") { result ->
// JS 返回值
}
JS 中
function jsFunction(msg) {
return "received: " + msg;
}
✅ 支持返回值
✅ Android 4.4+ 推荐
WebView
↓ JS
NativeBridge(统一入口)
↓ 路由
Module(登录 / 支付 / 分享)
示例:
NativeBridge.invoke("pay", { orderId: 1 })
Native 用 JSON 解析后分发。
如果你有具体场景(如:登录、支付、文件上传、Vue/React 页面),我可以给你完整示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。