You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WebView与JavaScript将Java变量填入外部网站输入框

问题分析与解决方案

你的核心问题有两个:

  1. 误用了JSP模板语法<%= drug1 %>——这是Java Web端的模板语法,Android原生Java代码根本不会解析它,导致JS代码里实际是把<%= drug1 %>当成了字面量,而不是你定义的Java变量值。
  2. JS字符串必须用引号包裹——你硬编码时加了单引号'isotretinoin'是正确的,但尝试的其他写法都没给变量值加引号,JS会把它识别为未定义的变量,而非字符串。

正确实现方式

方式1:直接字符串拼接(简单场景)

把Java变量用引号包裹后,直接拼入JS代码字符串中:

String drug1 = "tetracycline";

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String weburl){
        // 用单引号包裹drug1,拼入JS代码
        String setValueJs = "javascript:document.getElementById('livesearch-interaction-basic').value = '" + drug1 + "'; null";
        webView.loadUrl(setValueJs);
        webView.loadUrl("javascript:document.getElementsByTagName('input')[2].click()");
    }
});

注意:如果drug1包含单引号,会导致JS语法错误,此时可以改用双引号包裹,同时转义Java中的双引号:

String setValueJs = "javascript:document.getElementById('livesearch-interaction-basic').value = \"" + drug1 + "\"; null";

方式2:使用evaluateJavascript(推荐,Android 4.4+)

evaluateJavascript是比loadUrl更高效的JS交互方式,还能更安全地处理字符串:

String drug1 = "tetracycline";

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String weburl){
        webView.evaluateJavascript(
            // 合并JS操作,减少调用次数
            "document.getElementById('livesearch-interaction-basic').value = '" + drug1 + "'; document.getElementsByTagName('input')[2].click();",
            null // 不需要回调结果时传null
        );
    }
});

方式3:安全转义特殊字符(复杂场景)

如果drug1可能包含引号、换行等特殊字符,用JSONObject自动转义字符串,避免JS语法错误:

import org.json.JSONObject;

// ...

String drug1 = "tetracycline";
// 自动转义特殊字符
String escapedDrug = new JSONObject().put("drug", drug1).getString("drug");

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String weburl){
        webView.evaluateJavascript(
            "document.getElementById('livesearch-interaction-basic').value = " + escapedDrug + "; document.getElementsByTagName('input')[2].click();",
            null
        );
    }
});

另外补充:你之前的代码里给onPageFinished加了@JavascriptInterface注解是错误的——这个注解是给Java方法标记为可被JS调用的,而onPageFinished是WebViewClient的回调方法,不需要这个注解。

内容的提问来源于stack exchange,提问作者Conor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:01:22