UIWebViewでCSSを読み込む方法です。
ちょっとメモ代わりに記事にします。
いくつか方法がありますが、Javascriptを実行するのが一番手っ取り早いでしょう。
Bundle内のファイルのパスを取得して、そのファイルのテキストを読み込んだstyleかファイルへの絶対パスをsrcとしたlinkタグを追加するjavascriptをUIWebViewが実行します。
cssのファイルのテキストを読みこんで追加するのは以下のようなコードで動作します。
- (void)_webViewLoadCSS:(UIWebView *)webView appendCSS:(NSString *)css{
NSMutableString *javascript = [NSMutableString new];
[javascript appendString:@"var style = document.createElement('style');"];
[javascript appendString:@"style.type = 'text/css';"];
[javascript appendFormat:@"var css = document.createTextNode('%@');", css];
[javascript appendString:@"style.appendChild(css);"];
[javascript appendString:@"document.head.appendChild(style);"];
}
cssのファイルへのパスを取得する場合は、以下のようなコードで読み込めます。
- (void)_webViewLoadCSS:(UIWebView *)webView{
NSURL *url = [[NSBundle mainBundle] URLForResource:@"hogehoge" withExtension:@"css"];
NSMutableString *javascript = [NSMutableString new];
[javascript appendString:@"var style = document.createElement('link');"];
[javascript appendString:@"style.type = 'text/css';"];
[javascript appendString:@"style.setAttribute('rel','stylesheet');"];
[javascript appendFormat:@"style.setAttribute('href','%@');",[url.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[javascript appendString:@"document.head.appendChild(style);"];
[webView stringByEvaluatingJavaScriptFromString:javascript];
}
これのコードをUIWebView
のDelegate
メソッドwebViewDidFinishLoad:
で呼び出せば、読み込んだHTMLにCSSを追加できます。