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

如何从Android WebView获取JavaScript返回值及输入框值到Java应用

解决Android WebView获取JavaScript返回值的问题

问题根源

你之前的代码错误是因为WebView.loadUrl()方法的返回值是void,它仅用于执行JavaScript代码,无法直接返回JS函数的结果,所以不能赋值给String类型变量。

方案一:使用evaluateJavascript()(推荐)

这是Android 4.4(API 19)及以上版本提供的异步方法,专门用于获取JavaScript执行的返回结果,安全性和效率都更高。

步骤1:启用WebView的JavaScript支持

WebView myWebView = findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

步骤2:异步获取输入框的文件名

// 替换成你的输入框实际ID
String jsCode = "document.getElementById('your-input-id').value";
myWebView.evaluateJavascript(jsCode, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String result) {
        // JS返回的结果会被JSON序列化,需去除前后的双引号
        String fileName = result.replace("\"", "");
        
        // 这里可直接使用文件名,结合你的data URI执行下载逻辑
        // 例如:解析data URI为字节流,保存文件时用该文件名命名
    }
});

方案二:通过JavaScriptInterface回调

适合需要更复杂交互的场景,让JavaScript主动将数据传递给Android端。

步骤1:创建JS接口类

public class WebAppInterface {
    private Context mContext;

    WebAppInterface(Context c) {
        mContext = c;
    }

    // API 17+必须添加@JavascriptInterface注解,否则JS无法访问该方法
    @JavascriptInterface
    public void receiveFileName(String fileName) {
        // 直接获取到文件名
        // 注意:此方法运行在WebView后台线程,更新UI需切换到主线程
        ((Activity) mContext).runOnUiThread(() -> {
            // 执行下载逻辑,比如结合data URI保存文件
        });
    }

    // 可扩展方法,同时接收data URI和文件名
    @JavascriptInterface
    public void receiveDownloadData(String dataUri, String fileName) {
        // 处理data URI和文件名,完成下载操作
    }
}

步骤2:给WebView绑定接口

myWebView.addJavascriptInterface(new WebAppInterface(this), "AndroidApp");

步骤3:在JavaScript中调用接口传递数据

// 例如用户点击下载按钮时触发
function startDownload() {
    var fileName = document.getElementById('your-input-id').value;
    var dataUri = // 你的Blob转base64的data URI逻辑
    // 调用Android端接口传递文件名
    AndroidApp.receiveFileName(fileName);
    // 或者同时传递data URI
    // AndroidApp.receiveDownloadData(dataUri, fileName);
}

注意事项

  • 使用evaluateJavascript()时,返回的结果会被JSON格式化,字符串会被包裹双引号,需要处理后再使用。
  • JavaScriptInterface的方法必须添加@JavascriptInterface注解,避免API 17及以上版本的安全限制。
  • JS回调到Android的方法默认运行在WebView后台线程,若需更新UI,必须切换到主线程(如使用runOnUiThread)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:32:19