2015-05-03 18 views
15

Ví dụ: tôi muốn thay đổi màu nền của www.google.com thành red. Tôi đã sử dụng webview và tệp style.css của tôi là ở assest folder. Tôi muốn tiêm tập tin style.css này vào www.google.com. Có gì sai với mã của tôi? Vui lòng viết mã chính xác cho tôi. Cảm ơn. MainActitviy.java tập tin của tôi:chèn CSS vào trang web có chế độ xem web trong 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); 
     } 
    } 

Trả lời

31

Bạn không thể tiêm CSS trực tiếp tuy nhiên bạn có thể sử dụng Javascript để thao tác trang 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. Tôi đã sao chép các mã này vào dự án của mình. Bây giờ tôi có thể thay đổi phong cách của trang. Nhưng có một vấn đề lớn. Nó không thể tải trang. nó nói: Trang web không có sẵn. Nó không mở www.google.com. Tôi nên thay đổi mã nào? – sinaamiri

+0

Tìm kiếm và đọc về phương pháp WebViewClient và shouldOverrideUrlLoading. Đừng quên đưa quyền INTERNET vào tệp AndroidManifest. – Manish

+0

Tôi muốn chèn JavaScript vào trang web của mình, vì vậy Điều đó có nghĩa là tôi có thể truy cập vào trang web của mình, làm cách nào tôi có thể cho phép mình chèn JavaScript để được hỗ trợ đầy đủ JavaScript. Tôi hỏi qustion [ở đây] (http://stackoverflow.com/questions/30036907/inject-javascript-file-to-my-site-with-webview-in-android). Cảm ơn – sinaamiri

Các vấn đề liên quan