2011-01-24 6 views
13

goBackメソッドを壊さずに、自分のUIWebViewにカスタムHTMLを読み込めません。私は私のUIWebViewのURLリクエストを傍受していUIWebViewでNSURLRequestsを傍受できますか?

をどのような作品

はので、私は、カスタムHTMLを読み込むことができます。私はすべてのHTMLを制御しているので、特別なアプリケーションリクエストではwebView:shouldStartLoadWithRequest:navigationType:で解析できるカスタムスキーム(つまり、myapp://arg1/?arg2=val)を使用しています。私は実際にロードするHTMLを決めて、loadHTMLString:baseURLと呼び出して、元の要求を取り消すためにNOを返します。偉大

上記の作品を動作しない何

。問題は、UIWebView'sgoBackメソッドを使用したいとし、loadRequest:は、その履歴スタックに追加する唯一のUIWebViewメソッドであるようです。

私はいくつかのアイデアを持っていますが、どちらが実現可能で、どのように動くかはわかりません。主なことは、YESwebView:shouldStartLoadWithRequest:navigationTypeに返さなければならないと思われ、私はUIWebViewloadRequestメソッドを使用しなければなりません。

アイデア1:修正NSURLRequest /応答:それは実際にHTTPリクエストを作成し、その中に私のHTMLとNSURLResponseを返していません(のUIWebViewが要求を出したときに)なるように 私はNSURLRequestをサブクラス化することはできますか?または、NSURLResponseにカテゴリメソッドを何とか変更したり、サブクラス化したり、追加したりできますか?私はそれが本当の要求であるという考えが好きですが、プライベートAPIとApp Storeからの拒否に懸念しています。

アイデア2:カスタムURLプロトコルを処理 カスタムURLプロトコルを登録しますので、私のアプリは、それに応答し、私はそれが正当なNSURLResponse返すことができます

アイデア3(私のカスタムHTMLでいっぱいに。) :キャッシュを騙すこのキャッシュポリシーNSURLRequestReturnCacheDataDontLoadでリクエストを作成し、何とかWebViewとキャッシュの間にHTMLを挿入しますか?

私は間違ったトラックにいるかもしれませんか?

+1

来ましたか?もしそうなら、それは何でしたか? –

+0

私の新しい答えを見てください。 – zekel

答えて

1

上記の方法のいずれかをお勧めします。

私は#3の作業をしましたが、非常に壊れやすく、デバッグが難しかったです。たとえば、AppleはNSURLRequestsを破壊して再作成するので、NSURLRequestをサブクラス化して後続の応答でやり遂げることはできません。

これは私自身の履歴とメモに簡単になりましたどのページを読み込んでスクロールするか(垂直方向のスクリーンオフセット)。

+0

お返事ありがとうございます。 Ortwinによって提案されたLove with Cocoaのローカルキャッシュの提案を試してみることにしました。これまでのところ、私が必要としていることをしているように見え、かなり頑強であるようです。 –

7

は、私はちょうどテストした別の本当に賢いアプローチがあります:代わりにNSURLCacheいじりや全体のナビゲーション履歴コードを書き換えるだけHTTPリクエストが行われるたびに、標準NSURLConnectionで使用されるカスタムNSURLProtocolを作成します。そこで、自分でNSURLRequestを作成してデータを読み込み、MIMEタイプを調べたり、要求の内容を変更したり、データをディスクにキャッシュしたりできます。このアイデアは、ロブ・ネイピアのおかげで来る:

http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588

彼のコードはGitHubの上でも、今ある:あなたは良い解決策で

https://github.com/rnapier/RNCachingURLProtocol

+0

これらのリンクを送信していただきありがとうございます。私がまだ興味を持っていることは間違いありません。 – zekel

関連する問題