如何在点击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
相关产品推荐
相关产品推荐

