UIWebView で表示中のソースコードを取得する : Objective-C プログラミング

PROGRAM


UIWebView で表示中のソースコードを取得する

UIWebView で表示中の HTML ソースコードを取得したい場合は、次のようにします。

NSString* html = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].outerHTML"];

HTML の <body> の中だけでいい場合は、次のようにすると簡単です。

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

 

なお、ここでは <html> または <body> をキーにして HTML の内容を取得しています。

UIWebView の -loadHTMLString:baseURL: メソッドで <html> や <body> を含まないテキストを読み込ませた場合、自動的にその外側が "<html><head></head><body>" と "</body><html>" で括られるようでした。

そのため、上記のように <html> や <body> があることを前提にしたコードでも、ソースコードを取得することが可能です。

 

逆に、前者の方法だと、設定したときにはなかった <html> や <body> タグが取得できるので、場合によっては注意する必要があるかもしれません。

もっとも、UIWebView は、指定された HTML を読み込んだときに閉じタグが見つからなかったら自動的に追加したりと、元のソースを適宜調整するようなので、そこまでオリジナルのソースにこだわる場合は、そもそも NSURLRequest を使ってソースコードを直接取得するのがいいかもしれませんね。

 

UIWebView の非同期処理に注意

なお、UIWebView の表示処理は非同期で実行されるため、表示したい内容を設定してから表示されるまでにタイムラグがあります。

これは、URL からデータをダウンロードする -loadRequest: だけでなく、ローカルのデータを表示するための -loadHTMLString:baseURL: や -loadData:MIMEType:textEncodingName:baseURL: でも同様です。

今回の stringByEvaluatingJavaScriptFromString: による方法は、ページが表示され終わってからでないと HTML ソースを取得できないため、確実に取得する必要があるときには UIWebViewDelegate の -webViewDidFinishLoad: が呼び出された後の、読み込みが終了したタイミング以降で実行するのが安全です。

[ もどる ]