如何删除 Android WebView 中的标题? (加载时)

新手上路,请多包涵

我想删除android’ WebView ‘中的网站标题。使用我拥有的代码,它可以工作。但问题是“ WebView ”在页面完全加载后删除了标题。我想在加载时将其删除。

那是代码片段:

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                webView.loadUrl("javascript:(function() { " +
                        "var head = document.getElementsByTagName('header')[0];"
                        + "head.parentNode.removeChild(head);" +
                        "})()");

                webView.loadUrl("javascript:(function() { " +
                        "var head = document.getElementsByTagName('footer')[0];"
                        + "head.parentNode.removeChild(head);" +
                        "})()");
            }
        });

原文由 Sinan Kara 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 500
2 个回答

最简单的方法是在 onLoadResource() 方法中注入 Javascript。将它放在 try-catch 块中,因为 WebView 在加载之前不会知道该元素:

 webView.setWebChromeClient(new WebChromeClient() {
           ...

            @Override
            public void onLoadResource(WebView view, String url) {

                try {
                    webView.loadUrl("javascript:(window.onload = function() { " +
                            "(elem1 = document.getElementById('id1')); elem.parentNode.removeChild(elem1); " +
                            "(elem2 = document.getElementById('id2')); elem2.parentNode.removeChild(elem2); " +
                            "})()");
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
}

原文由 realpac 发布,翻译遵循 CC BY-SA 3.0 许可协议

ANDROID WebView-从 Android 中的网页中删除标题或任何标签

让我们了解这是怎么可能的,在我的例子中,我已经在 webview 中加载了 url,看起来像下面的截图,

在此处输入图像描述

现在从上面的视图来看,如果我们想删除网页的标题和菜单部分。我们需要使用 JSOUP 库,借助它您可以删除网页中不需要的部分。

脚步

  1. 在您的应用程序级构建 gradle 中添加 jsoup 库

编译’org.jsoup:jsoup:1.10.3’

  1. 现在在活动中,我们将使用异步任务,因为我们解析/删除一些导致无法直接在 UI 线程上完成的网络操作的 html 标记。 Async Task 允许您执行后台操作并在 UI 线程上发布结果。它有三种常用的方法。

onPreExecute():-用于显示进度条

doInBackground():-此步骤用于执行可能需要很长时间的后台计算。您不能在此方法中更新任何 UI。

onPostExecute():-这是在后台任务完成后调用的,它将更新 UI。

我已经在 xml 中定义了 WebView,如下所示,

   <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webview"/>

在 MainActivity.java 中,我编写了 JSOUP 代码来删除网页中不需要的部分

 public class MainActivity extends AppCompatActivity {
WebView webview;
String url="http://pixelay.com/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webview= (WebView) findViewById(R.id.webview);
    new MyAsynTask().execute();
}

private class MyAsynTask extends AsyncTask<Void, Void, Document> {
    @Override
    protected Document doInBackground(Void... voids) {

        Document document = null;
        try {
            document= Jsoup.connect(url).get();
            document.getElementsByClass("main-navigation").remove();
            document.getElementsByClass("custom-header-image").remove();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return document;
    }

    @Override
    protected void onPostExecute(Document document) {
        super.onPostExecute(document);
        webview.loadDataWithBaseURL(url,document.toString(),"text/html","utf-8","");
        webview.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );

        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, request);
            }
        });
    }
}

}

现在,是时候看看结果了,

在此处输入图像描述


原文由 Fenil Patel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题