web-dev-qa-db-ja.com

UIWebViewとローカルcssファイル

デスクトップ向けの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に変更を加えることは、実際に機能します。これは、呼び出しを正しく使用しているかどうかを確認するための演習として行われます。

私は間違った木を吠えていますか?

17
Edward Bender

ローカルプロジェクトディレクトリからCSSをロードできます

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];

詳細情報このサイトを確認してください: http://iphoneincubator.com/blog/windows-views/uiwebview-revisited

26
user275790

見つかった要素のインデックス0を選択すると、コードは機能するはずです。

    NSString *js = @"document.getElementsByTagName('link')[0].setAttribute('href','";
    NSString *js2 = [js stringByAppendingString:cssPath];
    NSString *finalJS = [js2 stringByAppendingString:@"');"];
    [webview stringByEvaluatingJavaScriptFromString:finalJS];

あなたは[0]を逃しました

2
user469350

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)
2
Jens