133

にロードされた Web ページの生の HTML コンテンツを読み取ることは可能UIWebViewですか?

そうでない場合、iPhone SDK の Web ページから未加工の HTML コンテンツを取得する別の方法 (.NET に相当するものなどWebClient::openRead) はありますか?

4

10 に答える 10

216

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はややあいまいで、ドキュメントではあまり説明されていません)。

詳細については:

  • UIWebViewクラス リファレンス
  • NSStringクラス リファレンス
  • NSURLクラス リファレンス
于 2009-06-14T07:32:56.057 に答える
44

HTMLの生データ全体(と<head>を使用<body>)を取得するには:

NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
于 2012-04-16T17:46:32.950 に答える
29

NSString stringWithContentsOfURL は、同じリクエストを行う UIWebView とはまったく異なるユーザー エージェント文字列を報告することに注意してください。したがって、サーバーがユーザーエージェントを認識しており、要求者に応じて異なる html を送り返す場合、この方法では正しい結果が得られない可能性があります。

@"document.body.innerHTML"また、上記は body タグに含まれるもののみを表示することに注意してください。使え@"document.all[0].innerHTML"ば頭も体も手に入る。!doctype または html タグが返されないため、これはまだ UIWebView の完全なコンテンツではありませんが、はるかに近いものです。

于 2010-11-30T19:30:58.637 に答える
20

読むには: -

NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);    

変更するには:-

html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];
于 2009-10-22T17:32:02.430 に答える
1

(Xcode 5 iOS 7) iOS 7 および Xcode 5 用のユニバーサル アプリの例。これはオープン ソース プロジェクト/例で、ここにあります: SimpleWebView へのリンク (プロジェクトの Zip とソース コードの例)

于 2014-01-21T04:42:17.340 に答える