在Android 中透過WebView 將CSS 注入網站
當嘗試更改WebView 中載入的網站的外觀時,例如更改Google.com的背景顏色為紅色,透過從assets資料夾中註入style.css文件,可能會出現不可預見的錯誤。
提供的程式碼無法注入style.css文件,因為WebView無法直接存取CSS 文件。
解決方案:
要將CSS 注入到WebView 中顯示的網站,必須使用基於JavaScript 的方法:
<code class="java">public class MainActivity extends ActionBarActivity { // Initialize WebView private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create WebView and enable JavaScript webView = new WebView(this); setContentView(webView); webView.getSettings().setJavaScriptEnabled(true); // Set WebViewClient for page load handling webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { // Inject CSS after page load injectCSS(); super.onPageFinished(view, url); } }); // Load the website webView.loadUrl("https://www.google.com"); } // Inject CSS method private void injectCSS() { try { // Retrieve style.css from assets folder InputStream inputStream = getAssets().open("style.css"); byte[] buffer = new byte[inputStream.available()]; inputStream.read(buffer); inputStream.close(); // Encode and insert CSS into HTML document head 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';" + "style.innerHTML = window.atob('" + encoded + "');" + "parent.appendChild(style)" + "})()"); } catch (Exception e) { e.printStackTrace(); } } // ... (Other methods and menus) }</code>
此改進的程式碼可以利用JavaScript 注入CSS。它從assets資料夾中讀取style.css文件,將其編碼為Base64,並將其嵌入到HTML文件頭中,從而可以操作網站樣式。
以上是如何將 CSS 注入到 Android WebView 中顯示的網站中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!