2012-01-05 12 views
8

私はちょうどのようなWebViewの中に外部のウェブページにカスタムCSSを適用するには、外部ウェブページにカスタムCSSを注入する方法アンドロイド - WebViewの

webView.loadUrl("<style>body {font-size:15px;}</style>"); 
webView.loadUrl("http://www.stackoverflow.com"); 

答えて

1
String html = ... // load manually 
// insert the style to <head> 
webview.loadData(html, "text/html", null); 
+0

はあなたの詳細をしていただけますか? –

+0

@ An-droidの例:String html = download( "http://www.stackoverflow.com"); html = html.replaceFirst( ""、 ""); webview.loadData(html、 "text/html"、null); – xfx

1

あなたはjavascript: URL機能を使用してカスタムJSを注入することができ従ってください。ここで

は、Javaからこれを使用してCSSルールを追加することができます方法は次のとおりです。

/** 
* Creates a CSS element in the <head> section of the Web page and assigns it 
* to a `customSheet` JS variable 
*/ 
private final static String CREATE_CUSTOM_SHEET = 
    "if (typeof(document.head) != 'undefined' && typeof(customSheet) == 'undefined') {" 
     + "var customSheet = (function() {" 
      + "var style = document.createElement(\"style\");" 
      + "style.appendChild(document.createTextNode(\"\"));" 
      + "document.head.appendChild(style);" 
      + "return style.sheet;" 
     + "})();" 
    + "}"; 

/** 
* Adds CSS properties to the loaded Web page. A <head> section should exist when this method is called. 
* The Web view should be configured with `.getSettings().setJavaScriptEnabled(true);` 
* 
* @param webView Web view to inject into 
* @param cssRules CSS rules to inject 
*/ 
void injectCssIntoWebView(WebView webView, String... cssRules) { 
    StringBuilder jsUrl = new StringBuilder("javascript:"); 
    jsUrl 
     .append(CREATE_CUSTOM_SHEET) 
     .append("if (typeof(customSheet) != 'undefined') {"); 
    int cnt = 0; 
    for (String cssRule : cssRules) { 
     jsUrl 
      .append("customSheet.insertRule('") 
      .append(cssRule) 
      .append("', ") 
      .append(cnt++) 
      .append(");"); 
    } 
    jsUrl.append("}"); 

    webView.loadUrl(jsUrl.toString()); 
} 

そしてここでは、上記の方法の使用例です:

@Override 
public void onPageFinished(WebView webView, String url) { 
    // Several people probably worked hard on the design of this Web page, let's hope they won't see what's next 
    injectCssIntoWebView(
     webView, 
     "div { border: 4px solid yellow; }", 
     "p { border: 4px solid green; }", 
     "a { border: 4px solid black; }", 
     "img { border: 4px solid blue; }" 
    ); 
} 
関連する問題