にロードされた Web ページの生の HTML コンテンツを読み取ることは可能UIWebView
ですか?
そうでない場合、iPhone SDK の Web ページから未加工の HTML コンテンツを取得する別の方法 (.NET に相当するものなどWebClient::openRead
) はありますか?
2 番目の質問は、実際には簡単に答えられます。NSStringのメソッドを見てくださいstringWithContentsOfURL:encoding:error:
。URL を NSURL のインスタンス (NSString から簡単にインスタンス化できます) として渡すことができ、その URL のページの完全なコンテンツを含む文字列を返します。例えば:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
このコードを実行googlePage
すると、www.google.com の HTML がerror
含まれ、フェッチで発生したエラーが含まれます。error
(フェッチ後に内容を確認する必要があります。)
(UIWebView から) 他の方法に進むのは少しトリッキーですが、基本的には同じ概念です。ビューからリクエストを取得してから、前と同じように取得する必要があります。
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
編集:ただし、これらのメソッドは両方とも、リクエストを 2 回実行するため、パフォーマンスに影響します。現在ロードされている UIWebView からそのstringByEvaluatingJavascriptFromString:
メソッドを使用してコンテンツを取得することで、これを回避できます。
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
これは、ドキュメント オブジェクト モデルを使用してビューの現在の HTML コンテンツを取得し、JavaScript を解析して、HTML の NSString* として提供します。
もう 1 つの方法は、最初にプログラムでリクエストを行い、次にリクエストしたものから UIWebView をロードすることです。上記の 2 番目の例を取り上げるとしましょう。ここでNSString *page
は、呼び出しの結果としてstringWithContentsOfURL:encoding:error:
. loadHTMLString:baseURL:
次に、要求した NSURL も保持していると仮定して、 を使用してその文字列を Web ビューにプッシュできます。
[yourWebView loadHTMLString:page baseURL:requestURL];
ただし、ロードしたページで見つかった JavaScript がこれで実行されるかどうかはわかりません (メソッド名loadHTMLString
はややあいまいで、ドキュメントではあまり説明されていません)。
詳細については:
HTMLの生データ全体(と<head>
を使用<body>
)を取得するには:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
NSString stringWithContentsOfURL は、同じリクエストを行う UIWebView とはまったく異なるユーザー エージェント文字列を報告することに注意してください。したがって、サーバーがユーザーエージェントを認識しており、要求者に応じて異なる html を送り返す場合、この方法では正しい結果が得られない可能性があります。
@"document.body.innerHTML"
また、上記は body タグに含まれるもののみを表示することに注意してください。使え@"document.all[0].innerHTML"
ば頭も体も手に入る。!doctype または html タグが返されないため、これはまだ UIWebView の完全なコンテンツではありませんが、はるかに近いものです。
読むには: -
NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);
変更するには:-
html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];
(Xcode 5 iOS 7) iOS 7 および Xcode 5 用のユニバーサル アプリの例。これはオープン ソース プロジェクト/例で、ここにあります: SimpleWebView へのリンク (プロジェクトの Zip とソース コードの例)