Maison  >  Article  >  interface Web  >  Comment modifier l’apparence d’un site Web affiché dans une WebView ?

Comment modifier l’apparence d’un site Web affiché dans une WebView ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 01:58:28959parcourir

How to Modify the Appearance of a Website Displayed in a WebView?

Injecter du CSS dans un site Web affiché dans une WebView

Problème :

Vous devez modifier l'apparence d'un site Web affiché dans une WebView (par exemple, changez la couleur d'arrière-plan de www.google.com en rouge). Vos tentatives d'injection d'un fichier style.css du dossier Assets dans www.google.com ont échoué.

Solution :

Il n'est pas possible d'injecter directement du CSS dans un site Web affiché dans un Vue Web. Au lieu de cela, vous pouvez utiliser JavaScript pour manipuler le modèle d'objet de document (DOM) de la page.

Voici le code corrigé pour l'injection de CSS :

<code class="java">public class MainActivity extends ActionBarActivity {

  WebView webView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    webView = new WebView(this);
    setContentView(webView);

    // Enable Javascript
    webView.getSettings().setJavaScriptEnabled(true);

    // Add a WebViewClient
    webView.setWebViewClient(new WebViewClient() {

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

            // Inject CSS when page is done loading
            injectCSS();
            super.onPageFinished(view, url);
        }
    });

    // Load a webpage
    webView.loadUrl("https://www.google.com");
  }

  // Inject CSS method: read style.css from assets folder
  // Append stylesheet to document head
  private void injectCSS() {
    try {
        InputStream inputStream = getAssets().open("style.css");
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);
        inputStream.close();
        String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
        webView.loadUrl("javascript:(function() {" +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var style = document.createElement('style');" +
                "style.type = 'text/css';" +
                // Tell the browser to BASE64-decode the string into your script !!!
                "style.innerHTML = window.atob('" + encoded + "');" +
                "parent.appendChild(style)" +
                "})()");
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
}</code>

Explication :

  1. Activez JavaScript sur WebView.
  2. Ajoutez un WebViewClient pour surveiller la fin du chargement de la page.
  3. Définissez une méthode injectCSS() qui lit le fichier style.css à partir du dossier Assets, l'encode en Base64 et l'injecte dans l'en-tête du document à l'aide de JavaScript.
  4. Appelez injectCSS() lorsque le chargement de la page est terminé.

Cette approche utilise JavaScript pour modifier le DOM du site Web affiché dans le WebView, permettant ainsi d'injecter des styles CSS dans la page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn