Maison  >  Article  >  interface Web  >  Comment injecter du CSS personnalisé dans un site Web affiché dans une WebView sur Android ?

Comment injecter du CSS personnalisé dans un site Web affiché dans une WebView sur Android ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 20:17:02812parcourir

How to Inject Custom CSS into a Website Displayed in a WebView on Android?

Incorporer du CSS dans des sites Web à l'aide de WebViews dans Android

L'injection de CSS personnalisé dans des sites Web affichés dans des vues Web peut améliorer l'expérience utilisateur. Cet article traite d'une méthode pour injecter du CSS dans une page Web affichée dans une vue Web sur un appareil Android.

Description du problème

Votre objectif est de modifier la couleur d'arrière-plan de www .google.com en rouge. Vous avez tenté d'injecter du CSS à partir d'un fichier nommé style.css situé dans le dossier Asset, mais votre code ne fonctionne pas.

Code incorrect

Le code incorrect que vous à condition :

String html = "<html><head><style> src: url('file:///android_asset/style.css')</style></head></html>";

webView.loadData(html, "text/html", "utf-8");
webView.loadUrl("https://www.google.com");

Solution correcte

Le CSS ne peut pas être directement injecté dans les pages Web ; cependant, vous pouvez manipuler le DOM de la page à l'aide de JavaScript. Voici le code corrigé :

// MainActivity.java

...

// 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);
    }
});

...

// 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();
    }
}

Ce code configure un WebViewClient qui attend la fin du chargement de la page avant d'injecter du CSS dans la page Web. La méthode injectCSS() lit le fichier CSS à partir du dossier d'actifs, l'encode en Base64, puis utilise JavaScript pour ajouter la feuille de style à l'en-tête du document de la page Web.

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