Android WebView与JavaScript交互详解
Android 里的 WebView 和 JavaScript 打交道,算是挺常见的事儿了。是你在做混合 App,或者只是想加载个网页,结果还得让页面能跟原生互通,这时候用好 WebView 的交互功能就挺关键。本文讲得比较清楚,基本原理、代码示例、安全坑点都覆盖到了,适合快速上手,避免踩坑。
WebView 的交互能力主要靠两个核心方法:addJavascriptInterface()
和evaluateJavascript()
。前者让 JS 能调 Java,后者让 Java 能发起 JS 代码。你要是之前没接触过,光这两招就够用了。
@JavascriptInterface注解是关键点,没这个注解,JS 调用 Java 方法会直接失效。用起来也不难,写个类挂个方法,加上注解,再把它扔给webView.addJavascriptInterface()
,JS 端就能通过window.android.xxx()
来用了。
如果你想让 Android 这边主动控制网页,比如触发个 JS 方法,可以用evaluateJavascript()
。它不仅能跑 JS,还能回调拿到 JS 那边的返回值。适合做双向通信,像你想拿个表单数据、执行个逻辑啥的,还挺方便。
安全问题可不能忽视。Android 4.2 后,JS 交互默认加了不少限制,主要是为了防 XSS 攻击。所以你用了@JavascriptInterface
,就得保证方法不要暴露敏感逻辑,WebView 加载的内容也要可信。
异步交互方面,虽然evaluateJavascript()
本身是异步的,但如果要搞得更灵活,比如多轮对话、回调事件,建议研究下postMessage
机制。它可以配合事件监听,做出比较复杂的交互逻辑。
放点扩展阅读的链接,想进一步研究的可以看看:
- Android WebView 与 JavaScript 交互(后续)
- Android WebView 与 JavaScript 交互示例
- WebKit 与 JavaScript 交互 Android WebView 实践
如果你正在搞 H5 容器,或者 App 里嵌了不少网页,这篇文章值得收藏。调试方便,代码也不绕,看完就能上手。
评论区