Skip to content

Instantly share code, notes, and snippets.

@lordmacu
Created December 7, 2016 15:46

Revisions

  1. lordmacu created this gist Dec 7, 2016.
    71 changes: 71 additions & 0 deletions MainActivity.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    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);
    }
    }