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

如何在点击Android选项菜单项时获取WebView的HTML源码?

获取Android WebView中的HTML源码(点击菜单项触发)

要实现点击菜单项时获取WebView的HTML源码,核心是通过JavaScript注入获取页面HTML内容,再通过@JavascriptInterface回调到Java层。以下是完整实现代码:

1. 创建HTML回调接收类

定义带@JavascriptInterface注解的类,用于接收JS返回的HTML字符串:

public class HtmlReceiver {
    private OnHtmlReceivedListener listener;

    public interface OnHtmlReceivedListener {
        void onHtmlReceived(String html);
    }

    public HtmlReceiver(OnHtmlReceivedListener listener) {
        this.listener = listener;
    }

    @JavascriptInterface
    public void onHtmlReceived(String html) {
        if (listener != null) {
            listener.onHtmlReceived(html);
        }
    }
}

2. 初始化WebView并绑定回调

在原有WebView配置基础上,添加JS交互绑定:

// 保留你原有的WebView配置
webView.getSettings().setJavaScriptEnabled(true);

if (Build.VERSION.SDK_INT < 18) {
    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
}
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

if (Build.VERSION.SDK_INT >= 19) {
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

// 绑定HTML回调接收器
webView.addJavascriptInterface(new HtmlReceiver(new HtmlReceiver.OnHtmlReceivedListener() {
    @Override
    public void onHtmlReceived(String html) {
        // 这里处理获取到的HTML,比如打印、发送或保存
        Log.d("WebViewHTML", "获取到的HTML内容:" + html);
    }
}), "HtmlReceiver");

webView.loadUrl("file:///android_asset/richtexteditor/index.html");

3. 菜单项点击时触发HTML获取

修改onOptionsItemSelected方法,注入JS代码获取HTML:

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() == R.id.action_send) {
        // 注入JS,获取页面完整HTML并回调到Java层
        webView.loadUrl("javascript:window.HtmlReceiver.onHtmlReceived(document.documentElement.outerHTML);");
        return true;
    }
    return super.onOptionsItemSelected(item);
}

注意事项

  • 确保JavaScriptEnabled已开启(你原代码中已配置)
  • Android 17及以上版本必须使用@JavascriptInterface,否则无法实现JS与Java交互
  • 若只需获取特定区域的HTML,可将document.documentElement.outerHTML替换为对应DOM选择器,比如document.getElementById('editor').innerHTML

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:09:23