1. ホーム
  2. html

[解決済み] UIWebViewからHTMLコンテンツを読み込む

2022-06-26 15:17:29

質問

に読み込まれたウェブページの生の HTML コンテンツを読み取ることは可能ですか? UIWebView ?

もしそうでなければ、iPhone SDKでWebページから生のHTMLコンテンツを引き出す他の方法(たとえば、.NETの WebClient::openRead )?

どのように解決するのですか?

2番目の質問は、実は答えるのが簡単です。を見てください。 stringWithContentsOfURL:encoding:error: このメソッドでは、NSURL (NSString から簡単にインスタンス化できます) のインスタンスとして URL を渡すと、その 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];

EDITです。 しかし、これらのメソッドは両方とも2回リクエストを行うので、パフォーマンスに打撃を与えます。現在ロードされているUIWebViewからコンテンツを取得することで、これを回避することができます。 stringByEvaluatingJavascriptFromString: メソッドを使用してコンテンツを取得することで、これを回避できます。

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString: 
                                         @"document.body.innerHTML"];

これは Document Object Model を使ってビューの現在の HTML コンテンツを取得し、JavaScript をパースして、HTML の NSString* として提供します。

もう一つの方法は、最初にプログラム的にリクエストを行い、リクエストされたものからUIWebViewをロードすることです。例えば、上記の2番目の例で、あなたが NSString *page を呼び出した結果 stringWithContentsOfURL:encoding:error: . そして、その文字列をウェブビューに書き込むには loadHTMLString:baseURL: を使用してウェブビューにプッシュすることができます。

[yourWebView loadHTMLString:page baseURL:requestURL];

ただし、これで読み込んだページで見つかったJavaScriptを実行するかどうかはわかりません(メソッド名です。 loadHTMLString というメソッド名はやや曖昧で、docsはそれについてあまり言及していません)。

より詳しい情報は