在 Android 的 WebView 中,与 JS 交互主要有两种方式:
loadUrl()(不推荐,简单场景可用)webView.loadUrl("javascript:showToast('Hello from Android')");
evaluateJavascript()(推荐,API 19+)webView.evaluateJavascript("javascript:getResult()", value -> {
// value 是 JS 返回结果
Log.d("JS Result", value);
});
addJavascriptInterface(最常用)webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsBridge(), "AndroidBridge");
public class JsBridge {
@JavascriptInterface
public void showToast(String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
<script>
AndroidBridge.showToast("Hello from JS");
</script>
⚠️ 注意:
@JavascriptInterfaceshouldOverrideUrlLoading(兼容性好)webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("jsbridge://")) {
// 解析 url 调用对应方法
return true;
}
return false;
}
});
JS:
location.href = "jsbridge://method?param=123";
WebChromeClient(如 alert / confirm)webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
result.confirm();
return true;
}
});
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
| 场景 | 方案 |
|---|---|
| Android → JS | evaluateJavascript |
| JS → Android | addJavascriptInterface |
| 老系统 / 安全 | URL Scheme |
如果你有 具体业务场景(如登录、支付、分享),我可以给你更完整的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。