在 Android 的 WebView 中“注入”通常有三种常见含义,下面分别说明,你可以按需使用:
addJavascriptInterface(Java ↔ JS 通信)适合:把 Java 对象暴露给 JS 调用
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Object() {
@JavascriptInterface
public String getToken() {
return "abc123";
}
}, "Android");
// JS 中调用
// Android.getToken()
⚠️ 注意:
@JavascriptInterfaceevaluateJavascript)适合:页面加载完成后执行 JS
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.evaluateJavascript(
"javascript:document.title='Hello'",
null
);
}
});
适合:注入统计、调试、修改 DOM
String js = "var s=document.createElement('script');" +
"s.src='https://xxx.com/inject.js';" +
"document.body.appendChild(s);";
webView.evaluateJavascript(js, null);
class JSBridge {
@JavascriptInterface
public void showToast(String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
webView.addJavascriptInterface(new JSBridge(), "Native");
JS 调用:
Native.showToast("你好");
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer token");
webView.loadUrl(url, headers);
CookieManager cm = CookieManager.getInstance();
cm.setCookie("https://example.com", "token=abc");
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
// 可修改、替换资源
return super.shouldInterceptRequest(view, request);
}
});
| 需求 | 方式 |
|---|---|
| JS 调原生 | addJavascriptInterface |
| 原生调 JS | evaluateJavascript |
| 注入脚本 | evaluateJavascript |
| 注入参数 | Header / Cookie |
| 修改请求 | shouldInterceptRequest |
如果你是指 “注入 SDK / 框架 / 调试工具(如 vConsole)” 或 “Xposed / Hook 注入”,可以告诉我具体场景,我可以给你更针对性的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。