Android WebView:如何只显示部分网页

时间:2015-08-29 09:19:13

标签: android

在网页中,我正在使用,我需要删除一些部分:侧边栏例如我尝试了一些方法来做到这一点,但没有succsess.It总是整页,这是我在片段中这样做了。我的代码是:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.standing_fragment,null);
    WebView wv= (WebView) view.findViewById(R.id.webView2);
    WebViewClient client=new WebViewClient(){
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            //super.onPageStarted(view, url, favicon);
            if(isLoaded)
                return;
            isLoaded=true;
            view.loadUrl(url);
            super.onPageStarted(view, url, favicon);
        }

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

        @Override
        public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:document.getElementById('sidebar').style.display = 'none';");
          //  wv.loadUrl("javascript:document.getElementsByClassName('div.table-container')[0].style.display='none'");
        }
    };

    WebSettings settings=wv.getSettings();
    settings.setLoadWithOverviewMode(true);
    settings.setUseWideViewPort(true);
    settings.setJavaScriptEnabled(true);
    wv.setWebViewClient(client);
    wv.loadUrl("http://www.soccernews.com/teams/psg/");
    return view;
}

我的错误是什么?

1 个答案:

答案 0 :(得分:1)

要解决此问题,您需要记住webview的工作原理。 这是某种嵌入式浏览器'视图。 你可以这样解决:

  1. 制作您自己的http get请求并阅读字符串响应。
  2. 操纵收到的字符串响应 - 在您的情况下注入Javascript代码
  3. 将操纵的代码加载到Web视图。
  4. 为了演示一个例子,我将使用我编写的HttpRequest类来支持android 22+(因为apache的软件包已被弃用)。

    第一步:请求并阅读字符串响应

    String response=new HttpRequest("http://somedomain.com").prepare().sendAndReadString();
    

    第二步:在加载前操纵响应

    result+="<script>onload=function(){document.getElementById('sidebar').style.display='none';}</script>";
    

    第三步:将其加载到网络视图

    wv.loadData(result, "text/html", "UTF-8");
    

    所有东西的简化示例:

    new AsyncTask<String, Void, String>(){
            protected String doInBackground(String[] params) {
                try {
                    return new HttpRequest(params[0]).prepare().sendAndReadString();
                } catch (Exception e) {
                    Log.e("***Web View - manipulated content - ERROR***", e.getMessage());
                    return null;//to promote null further
                }
            }
            protected void onPostExecute(String result) {
                if(result==null)return;//Error logged, don't load anything
                result=result.concat("<script>onload=function(){document.querySelector('#sidebar').style.display='none';}</script>");
                wv.loadData(result, "text/html", "UTF-8");
            }
        }.execute("http://www.soccernews.com/teams/psg/");