Maison >interface Web >tutoriel CSS >Comment injecter du CSS personnalisé dans un site Web à l'aide d'une WebView sous Android ?
Injecter du CSS dans des sites Web avec WebView sous Android
Dans la programmation Android, l'affichage des pages Web au sein d'une application est réalisé à l'aide de WebView. Cependant, il peut y avoir des situations où les développeurs doivent modifier l'apparence de la page affichée en injectant du CSS personnalisé.
Pour résoudre ce problème, on ne peut pas injecter directement du CSS dans la page Web avec une WebView. Pour contourner ce problème, JavaScript peut être utilisé pour manipuler le modèle objet de document (DOM) de la page.
Considérez le code révisé suivant pour le fichier MainActivity.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); } }
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!