Heim  >  Artikel  >  Web-Frontend  >  Wie ändere ich das Erscheinungsbild einer in einer WebView angezeigten Website?

Wie ändere ich das Erscheinungsbild einer in einer WebView angezeigten Website?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 01:58:28959Durchsuche

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

Injizieren von CSS in eine in einem WebView angezeigte Website

Problem:

Sie müssen das Erscheinungsbild einer Website ändern in einem WebView angezeigt werden (z. B. die Hintergrundfarbe von www.google.com in Rot ändern). Ihre Versuche, eine style.css-Datei aus dem Assets-Ordner in www.google.com einzufügen, waren erfolglos.

Lösung:

Es ist nicht möglich, CSS direkt in eine Website einzufügen, die in einem angezeigt wird WebView. Stattdessen können Sie JavaScript verwenden, um das Document Object Model (DOM) der Seite zu manipulieren.

Hier ist der korrigierte Code zum Einfügen von 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>

Erklärung:

  1. Aktivieren Sie JavaScript im WebView.
  2. Fügen Sie einen WebViewClient hinzu, um zu überwachen, wann die Seite vollständig geladen wurde.
  3. Definieren Sie eine injectCSS()-Methode, die die Datei style.css liest aus dem Assets-Ordner, kodiert es mit Base64 und fügt es mit JavaScript in den Dokumentkopf ein.
  4. Rufen Sie injectCSS() auf, wenn der Ladevorgang der Seite abgeschlossen ist.

Dieser Ansatz verwendet JavaScript um das DOM der im WebView angezeigten Website zu ändern, sodass Sie effektiv CSS-Stile in die Seite einfügen können.

Das obige ist der detaillierte Inhalt vonWie ändere ich das Erscheinungsbild einer in einer WebView angezeigten Website?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn