2015-05-03 20 views
15

Per esempio voglio cambiare il colore di sfondo del www.google.com-red. Ho usato webview, e il mio file style.css è in assest folder. Voglio iniettare questo file style.css su www.google.com. Cosa c'è di sbagliato con i miei codici? Si prega di scrivere i codici corretti per me. Grazie. mio MainActitviy.java di file:iniettare CSS a un sito con WebView in Android

package com.example.mysina; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.webkit.WebView; 

public class MainActivity extends ActionBarActivity { 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      WebView webView = new WebView(this); 

      setContentView(webView); 

        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"); 
     } 
     @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); 
     } 
    } 

risposta

31

Non si può iniettare direttamente CSS tuttavia è possibile utilizzare Javascript per manipolare la pagina dom.

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); 
    } 
} 
+0

Grazie. Ho copiato questi codici nel mio progetto. Ora posso cambiare lo stile della pagina. Ma c'è un grosso problema. Non può caricare la pagina. Dice: pagina web non disponibile. Non apre www.google.com. Quale codice dovrei cambiarlo? – sinaamiri

+0

Cerca e leggi sul metodo WebViewClient e shouldOverrideUrlLoading. Non dimenticare di includere l'autorizzazione INTERNET nel file AndroidManifest. – Manish

+0

Voglio iniettare JavaScript nel mio sito, quindi significa che posso accedere al mio sito, come posso permettermi di iniettare JavaScript per il pieno supporto di JavaScript. Ho chiesto a qustion [qui] (http://stackoverflow.com/questions/30036907/inject-javascript-file-to-my-site-with-webview-in-android). Grazie – sinaamiri

Problemi correlati