2013-10-24 18 views
8

ASIWebPageRequestの代わりにASIHTTPRequestライブラリを使用して、CSS、JavaScript、イメージファイルなどiOSのWebページ全体をダウンロードできますか?私はAFNetworkingフレームワークで同様のクラスを見つけることができないと思うし、これまでの検索は成功していない。 ASIHTTPRequestを使用することはできません。私のアプリの中では動作しないようですが、iOS7で動作している例はなく、とにかく最近のものを使用しています。ASIHTTPRequestを使用せずにiOSでウェブページ全体をダウンロード

私は基本的にiPhone/iPad上のディレクトリにローカルにウェブページ全体を保存して、ユーザがそれをローカルで編集して後でそのウェブサーバに送ることができるようにします。ユーザーはまた、UIWebViewでいつでもWebページを表示できる必要があります。

これができない場合は、HTMLファイルをダウンロードしてから解析して、外部リソースのURLを見つけて、個別にダウンロードする必要があります。私はずっとこれをやっていませんが、もしこれを達成するための最良のライブラリは何ですか?

誰もが私を助けてくれてありがとう!

+0

私は同様の質問が見つかりました: http://stackoverflow.com/を質問/ 8388769/htmlファイルで外部リソースを使用したファイルを保存する方法 これが役に立ちます。 – Paradox

+0

iOS5 +はキャッシングをサポートしているため、このプロジェクトは不要になりました。しかし、これでは何もできません。この投稿も見つかりました:http://stackoverflow.com/questions/16826820/uiwebview-webpage-caching-for-offline-viewing私はソースを見ていましたが、私は正確に私が何をしているかを実装する方法がわかりません。確かにこれのためのいくつかの並べ替えの種類がある必要がありますか? –

答えて

2

あなたはwgetのようなものの後ろにいるようですが、あなたがiOSでそれを行うことができるかどうかはわかりません。

ネイティブメソッドNSString stringWithContentsOfURL:encoding:error:を使用すると、WebページのHTMLを取得できます。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/clm/NSString/stringWithContentsOfURL:encoding:error

+0

これはCSSや画像のような外部リソースファイルを取得しません。 –

+0

また、それはスレッドをブロックし、私はすべてのブロックが悪いと思う。 (たとえあなたがブロックしてもそれはブロックされますが、それはOKですので、UIをブロックしないでください) –

+0

@ Daij-Djanそれを指摘してくれてありがとう。彼の質問の最後に、OPは 'stringWithContentsOfURL'とまったく同じHTMLファイルを取得する方法を尋ねます。 – Mina

1

私はのUIWebViewを使用し、それはあなたがカスタムNSURLProtocolを経由してあなたのアプリから作られたHTTP要求のすべてを傍受することができます

+0

あなたが働くいくつかのサンプルコードを供給できるなら、賞金はあなたのものだ。 –

+0

申し訳ありませんが、 –

1

になり、すべての要求をキャッシュしたいです。このコンセプトを拡張する必要がありますが、プロジェクトにドロップすると(UIWebViewなどの)リクエストがすべてログアウトされるシンプルなクラスがあります。

@interface TSHttpLoggingURLProtocol : NSURLProtocol 
@end 

@implementation TSHttpLoggingURLProtocol 

+ (void) load 
{ 
    [NSURLProtocol registerClass: self]; 
} 

+ (BOOL) canInitWithRequest: (NSURLRequest *) request 
{ 
    NSLog(@"%@", request.URL); 

    return NO; 
} 

@end 

あなたがこの上で拡大し、実際に(より完全例えばhttps://github.com/rnapier/RNCachingURLProtocolを参照)プロトコル実装からの要求を行うことができます。または、要求を追跡して後で自分でダウンロードすることもできます。

このようなプロトコルハンドラをUIWebViewの特定のインスタンスに関連付けることは、私が知っている簡単な方法ではありません。これでアプリ内のすべてのリクエストを傍受するつもりです。 (警告 - iOS7に、プロトコルは特定のNSURLSessionsに登録することができ、これらのために私はグローバルに登録プロトコルハンドラが傍受ないだろうと思います。)

関連する問題