デスクトップ向けのWebページを、iPhoneのUIWebViewで表示できるようにスタイル設定したいと思います。ページの発信元のWebサーバーにアクセスできません。これを行うには、プログラムで<link>
スタイルシート要素のhref
属性を変更します。
IBOutlet UIWebView *webView
で次のことを行います。
NSString *cssPath = [[NSBundle mainBundle] pathForResource:@"MyStyleSheet"
ofType:@"css"];
NSString *js = @"document.getElementsByTagName('link').setAttribute('href','";
NSString *js2 = [js stringByAppendingString:cssPath];
NSString *finalJS = [js2 stringByAppendingString:@"');"];
//check element structure
NSString *res = [webView stringByEvaluatingJavaScriptFromString:finalJS];
これは動作しません。 [webView stringByEvaluatingJavaScriptFromString:]
メッセージを使用して本文のbackgroundColor
に変更を加えることは、実際に機能します。これは、呼び出しを正しく使用しているかどうかを確認するための演習として行われます。
私は間違った木を吠えていますか?
ローカルプロジェクトディレクトリからCSSをロードできます
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];
詳細情報このサイトを確認してください: http://iphoneincubator.com/blog/windows-views/uiwebview-revisited
見つかった要素のインデックス0を選択すると、コードは機能するはずです。
NSString *js = @"document.getElementsByTagName('link')[0].setAttribute('href','";
NSString *js2 = [js stringByAppendingString:cssPath];
NSString *finalJS = [js2 stringByAppendingString:@"');"];
[webview stringByEvaluatingJavaScriptFromString:finalJS];
あなたは[0]を逃しました
Swift
(私のように)htmlスニペットのみを使用する場合(完全なWebページではない)、htmlスニペットのヘッダーにローカルのcssファイルを追加する必要があります。
したがって、次のようにhtmlヘッダーを定義します。
let htmlHeader = "<html> \n <head> \n <link href=\"default.css\" rel=\"stylesheet\" type=\"text/css\" /> \n </head> \n <body> \n"
そしてこのようなフッター:
let htmlFooter = "</body> \n </html>"
次に、次のようにcssのbaseURLを見つけます。
let baseURLForCss = Bundle.main.url(forResource: "default", withExtension: "css")
そして、次のように独自のcssを使用してhtmlスニペットをロードします。
webView.loadHTMLString(String.init(format: "%@%@&@", htmlHeader, htmlSnippet, htmlFooter), baseURL: baseURLForCss)