【问题标题】:Android WebView: display only some part of websiteAndroid WebView:仅显示网站的一部分
【发布时间】:2013-01-20 11:23:18
【问题描述】:

我想知道是否可以在 WebView 中仅显示网站的某些部分。例如,我有一个带有以下 html 的网站:

<html>
 <body>
<div id="1">ID 1</id>
<div id="2">ID 2</id>
<div id="3">ID 3</id>
</body>
</html>

是否可以只在WebView中显示,比如id="3"的div的内容? 我的代码是 WebWiew:

WebViewClient WebClient = new WebViewClient(){
        public boolean shouldOverrideUrlLoading(WebView view, String url){
          view.loadUrl(url);
          return true;
        }
    };


    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.getSettings().setBuiltInZoomControls(true);
    myWebView.getSettings().setBuiltInZoomControls(true);
    myWebView.setWebViewClient(WebClient);
    myWebView.loadUrl("https://www.example.com");

【问题讨论】:

  • 请不要将您的代码定位在“场外”,尤其是对于这么小的代码 sn-ps!而是更新您的问题并使用代码块在问题中正确显示您的代码

标签: java android android-webview


【解决方案1】:

您可以通过扩展 WebViewClient 并注入一些将呈现您的网页的 javascript 来做到这一点

public class MyWebClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl("javascript:your javascript");
}
}
.........
final MyWebClient myWebViewClient = new MyWebClient();
mWebView.setWebViewClient(myWebViewClient);

要隐藏元素,请使用view.loadUrl("javascript:document.getElementById(id).style.display = 'none';)

更多信息In Android Webview, am I able to modify a webpage's DOM?

【讨论】:

  • 因此,例如,如果我想显示一个带有 "example" 类的 div,我必须编写: view.loadUrl("javascript:document.getElementByClassName('example')");对吗?
  • @user1960978 您可以使用流动命令隐藏document.getElementById(id).style.display = 'none';和显示document.getElementById(id).style.display = 'block';
  • 在哪里可以找到我需要的javascript?你能解释一下吗?
  • @nadeemgc 将view.loadUrl("javascript:your javascript"); 中的your javascript 替换为您需要的javascript。
  • @Lemberg 我知道了。但我不清楚我的 javascript 将是什么。比如说我想从 www.google.com 页面隐藏 Gmail 按钮。我现在为此目的的 javascript 代码是什么?
【解决方案2】:

这里要了解的最基本的事情是我们在 web html 文件中引用的元素是 class 还是 id。如果它是 id,那么 getElementById 可以完美运行。如果它是一个类,则需要getElementsByClassName

以下是我正在使用的示例。

myWebView.loadUrl
      ("javascript:(function() { " +
           "document.getElementsByClassName('header_wrapper')[0].style.display='none'; " +
           "document.getElementsByClassName('footer-contact')[0].style.display='none'; "+
           "document.getElementsByClassName('navbar-header')[0].style.display='none'; "+
           "document.getElementsByClassName('footer-social')[0].style.display='none'; "+
           "document.getElementById('footer_bottom').style.display='none'; "+
           "document.getElementById('footer_content').style.display='none'; "+
           "document.getElementById('core_mobile_menu').style.display='none'; "+
           "document.getElementById('catapult-cookie-bar').style.display='none'; "+
       "}
      )()");

【讨论】:

  • 隐藏内容后会留下空白
  • 加载视图时,空白会存在 1/2 到 1 秒,但一旦加载完整视图,它们就会消失。这完全取决于设备速度。
  • 不,在我的情况下它保留在那里,可滚动的空白区域
  • 它工作正常,但是当我们导航到其他页面并按返回按钮返回时它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多