2015-05-03 6 views
15

Na przykład chcę zmienić kolor tła www.google.com na red. Użyłem webview, a mój plik style.css jest w assest folder. Chcę wstrzyknąć ten plik style.css do www.google.com. Co jest nie tak z moimi kodami? Napisz proszę odpowiednie kody. Dzięki. Moja MainActitviy.java file:wstrzyknij CSS do witryny z widokiem na WWW w Androidzie

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

Odpowiedz

31

Nie można wstrzyknąć bezpośrednio CSS jednak można użyć JavaScript do manipulowania strony 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

Thanx. Skopiowałem te kody do mojego projektu. Teraz mogę zmienić styl strony. Ale jest duży problem. Nie można załadować strony. mówi: Strona nie jest dostępna. Nie otwiera www.google.com. Który kod powinienem zmienić? – sinaamiri

+0

Wyszukaj i przeczytaj o metodach WebViewClient i shouldOverrideUrlLoading. Nie zapomnij uwzględnić uprawnienia INTERNET w pliku AndroidManifest. – Manish

+0

Chcę wstrzyknąć JavaScript do mojej witryny, więc oznacza to, że mogę uzyskać dostęp do mojej witryny, w jaki sposób mogę pozwolić sobie na wstrzykiwanie kodu JavaScript w celu pełnego wsparcia JavaScriptu. Zapytałem qustion [tutaj] (http://stackoverflow.com/questions/30036907/inject-javascript-file-to-my-site-w-webview-in-android). Dzięki – sinaamiri