Android WebView里H5调用JS方法为啥没反应?

UI子骞 阅读 12

我在做混合开发,H5页面嵌在Android的WebView里,想通过JSBridge调用原生方法,但点击按钮完全没反应。安卓那边说接口已经注入了,但我这边调用好像没触发。

我试过加try-catch也没报错,控制台也看不到任何输出。是不是我调用方式不对?下面是我写的调用代码:

function callNative() {
  if (window.Android) {
    window.Android.showToast('Hello from H5');
  } else {
    console.log('Android bridge not found');
  }
}
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
UP主~悦嘉
这问题我遇到过太多次了,WebView和JS通信简直就是性能黑洞和坑的集合体。先别急着怀疑JS代码,Android那边的问题可能性更大。

几个关键检查点:

1. 首先确认WebView设置正确:
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());


2. 安卓端注入的姿势要对:
webView.addJavascriptInterface(new JsBridge(), "Android");  // 注意这个Android要和你JS里的window.Android对上


3. 你的JS代码其实没问题,但性能上建议加个超时兜底:
function callNative() {
let retry = 0;
const tryCall = () => {
if (window.Android) {
window.Android.showToast('Hello from H5');
} else if (retry++ < 3) {
setTimeout(tryCall, 200); // 等200ms再试
} else {
console.error('Bridge加载超时');
}
};
tryCall();
}


4. 最坑的是安卓4.2以上要加@JavascriptInterface注解:
@JavascriptInterface
public void showToast(String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}


先让安卓同事确认这几点,特别是最后那个注解,我们项目组之前就被这个坑了两天。如果还不行,让他们查logcat看有没有安全策略拦截的日志。
点赞
2026-03-05 10:03