Подтвердить что ты не робот

Любой способ скрыть элементы из webview? (Андроид)

Есть веб-страница, которую я вытягиваю с помощью webview, однако я бы хотел скрыть 1 текстовую ссылку вверху. Есть ли способ сделать это? Ссылка находится в теле, поэтому я не могу скрыть элемент тела в целом. Веб-страница - это весь текст и одно маленькое изображение внизу, но текст генерируется каждый раз при его загрузке, поэтому я не могу просто скопировать/вставить тело.

Спасибо

4b9b3361

Ответ 1

final WebView webview = (WebView)findViewById(R.id.browser);

    webview.getSettings().setJavaScriptEnabled(true);

    webview.setWebViewClient(new WebViewClient() {
     @Override
    public void onPageFinished(WebView view, String url)
    {
        // hide element by class name
        webview.loadUrl("javascript:(function() { " +
                "document.getElementsByClassName('your_class_name')[0].style.display='none'; })()");
        // hide element by id
        webview.loadUrl("javascript:(function() { " +
                "document.getElementById('your_id').style.display='none';})()");

    }
    });

webview.loadUrl(url);

Ответ 2

Я понял! Введя javascript, мне пришлось использовать

webview.loadUrl( "JavaScript: (функция() {" +                      "Document.getElementsByTagName( 'а') [0].style.display = 'none';" +                      "})()" );

Удаляет ссылку (код). Замена ('a') с помощью ('img') приведет к удалению изображений.

(спасибо lexanderA - Внедрение JavaScript в WebView)

Ответ 3

Я новичок в Android Studio, мне удалось создать приложение с кодами, найденными в Интернете, чтобы показать, что мой сайт доступен в Google Play.

Это MainActivity.java:

    package mypackage;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    public WebView mywebview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mywebview=(WebView)findViewById(R.id.webview);
        WebSettings WebSEttings=mywebview.getSettings();
        WebSEttings.setJavaScriptEnabled(true);
        // Code to reflect changes into DOM wbesite in app
        WebSEttings.setDomStorageEnabled(true);
        mywebview.loadUrl("https://www.example.com");
        //Code for opening the app
        mywebview.setWebViewClient(new WebViewClient());
    }

    //Code for the back button
    @Override
    public void onBackPressed() {
        if (mywebview.canGoBack())
        {
            mywebview.goBack();
        }
        else
        {
            super.onBackPressed();
        }
    }


}

Я включил JavaScript и некоторый код для изменений, внесенных на веб-сайт, чтобы они отражались в приложении. Работает отлично.

Но я попытался скрыть идентификатор (или класс) без успеха. То, что я использовал:

//скрыть элемент по имени класса webview.loadUrl("javascript: (function() {" + "document.getElementsByClassName('your_class_name') [0].style.display = 'none';})()");

в публичной пустоте. Может ли кто-нибудь сообщить мне, что мне здесь не хватает, и почему это не работает? Я был бы признателен за это.

Заранее спасибо.

Ответ 4

Я использую WebViewSuite

и реализовать это

webViewSuite = findViewById(R.id.webViewSuite);
webViewSuite.startLoading("https://example.com/blog/");

и добавил customizeClient в WebViewSuite

webViewSuite.customizeClient(new WebViewSuite.WebViewSuiteCallback() {
      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
      }

      @Override
      public void onPageFinished(WebView view, String url) {
        hideSomeSectionOfBlog(view);
      }

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

и использовать функцию, чтобы скрыть элементы

 private void hideSomeSectionOfBlog(WebView view) {
    view.getSettings().setJavaScriptEnabled(true);
    view.loadUrl("javascript:(function() { " +
      "document.getElementById('Top_bar').style.display='none';" +
      "document.getElementById('Filters').style.display='none';" +
      "document.getElementById('Footer').style.display='none';" +
      "document.getElementsByClassName('Header').style.display='none';" +
      "})()");
  }

Надеюсь быть полезным

Примечание: если идентификатор не существует, JavaScript получает ошибку. пример, если фильтры не существуют id, нижний колонтитул и верхний колонтитул не отображаются = 'none', если вы не доверяете разделить, как это

view.loadUrl("javascript:(function() { " +
      "document.getElementById('Footer').style.display='none';})()");
view.loadUrl("javascript:(function() { " +
      "document.getElementById('Header').style.display='none';})()");