温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

安卓webview如何通信

发布时间:2026-10-10 23:11:19 来源:亿速云 阅读:93 作者:小樊 栏目:移动开发

在 Android 中,WebView 与 Native(Java/Kotlin)通信主要有以下几种方式,按使用频率从高到低说明:


一、JS → Native(网页调用原生)

1. 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


2. 拦截 URL Scheme(shouldOverrideUrlLoading)

通过伪造请求让 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";

✅ 兼容性好
❌ 只能传字符串,不适合大数据


3. 拦截 console.log / alert

较少用,常用于调试或简单通信。


二、Native → JS(原生调用网页)

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 解析后分发。


四、常见问题

  • 跨域:WebView 默认允许
  • HTTPS + http 资源:需配置混合内容
  • 线程问题:JS 回调在主线程
  • 大文件:用 Base64 或 File API + Native 下载

五、现代方案(进阶)

  • Jetpack WebView(Compose)
  • Capacitor / Cordova
  • 微信 JSSDK 模式

如果你有具体场景(如:登录、支付、文件上传、Vue/React 页面),我可以给你完整示例代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手