如何使用Android Java在WebView中渲染网站指定Div内容
仅在WebView中渲染目标游戏Div的解决方案
要实现只显示网页中的游戏区域,你需要在页面加载完成后通过JavaScript提取并替换页面内容,以下是具体实现步骤:
1. 修改WebView配置,添加页面加载完成后的JS注入
替换原代码为以下内容,核心是通过WebViewClient的onPageFinished方法注入处理脚本:
webView = findViewById(R.id.game); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 注入JS脚本提取游戏Div并替换页面内容 String jsScript = "(function() {" + // 替换为游戏所在Div的实际选择器(需自行查看网页元素确定) "var gameContainer = document.querySelector('.jogo-inner'); " + "if (gameContainer) {" + // 清空页面body,仅保留游戏Div "document.body.innerHTML = '';" + "document.body.appendChild(gameContainer);" + // 复制原页面样式,避免游戏样式丢失 "var pageStyles = document.querySelectorAll('style, link[rel=\"stylesheet\"]');" + "pageStyles.forEach(function(style) {" + "document.head.appendChild(style.cloneNode(true));" + "});" + "}" + "})()"; // 使用evaluateJavascript执行脚本(比loadUrl更推荐) webView.evaluateJavascript(jsScript, null); } }); webView.loadUrl("https://www.escolagames.com.br/jogos/forma-palavras");
2. 确定游戏Div的正确选择器
打开目标网页,右键点击游戏区域选择「检查」,查看游戏所在Div的属性:
- 如果Div有唯一ID,比如
id="jogo-main",就把document.querySelector('.jogo-inner')改成document.getElementById('jogo-main') - 如果是class选择器,比如
class="game-box",就用document.querySelector('.game-box')
3. 处理动态加载的情况
如果游戏内容是异步加载的,onPageFinished触发时可能还未渲染游戏Div,可添加延迟执行:
// 在onPageFinished中替换为延迟执行 view.postDelayed(() -> { webView.evaluateJavascript(jsScript, null); }, 2000); // 延迟2秒,可根据实际加载速度调整
内容的提问来源于stack exchange,提问作者Nathiel Paulino
相关产品推荐
相关产品推荐

