SiteClipper で UIWebView のキャッシュについてそうとう色々調べたけれども、結局キャッシュの挙動を完全にはコントロールできませんでした…
ローカルへ自前でキャッシュするコードは書けたのですが、OSからのコールバックというか、ようは NSURLCache をサブクラス化してもWEBページ全てのリソースにたいして cachedResponseForRequest がコールバックされないんです。
どうやら、あるリソースはメモリーキャッシュを取ってきてるらしくて、この関数でキャッチされない。
しかも、パタンが読めない…
(´Д`) =3 ハァ…
誰かこの問題の解決方法知ってたら教えてほしいっす。
やりたいことは
「完全にオフラインでキャッシュしたサイトを見たい!」
たった、これだけの事なのです。
で、少し発想をかえて、実際に完全オフラインブラウズを実装した結果がこの記事にある Youtube の動画になります。
この方法、実はこの SiteClipper を作ろうと思っていたときから考えてはいたのですが、カスタムキャッシュに拘りすぎて、ずいぶんと遠回りしちゃったかなぁ〜と(笑)
感の良い人は気がついたと思いますが、これページをキャプチャしてキャッシュしてるだけなんです。
タイトルからもバレバレですが…
そもそも本来のブラウザ機能のリンクとかは端から無視しちゃってるので(笑)、ようは指定したページの情報がどんな方法であれ見えればOKなんです。
もとのコンセプトがサイトクリップですからね。
書くのは簡単なのですが、実装には色々面倒なこともあって
例えば
長いページはキャプチャの画像サイズがデカ過ぎて落ちるとか
長いページはキャプチャの画像サイズがデカ過ぎて落ちるとか
長いページはキャプチャの画像サイズがデカ過ぎて落ちるとか
えっ? 1つだけじゃないかって??
あはは、まぁその通り!
ただ、WebViewをキャプチャするサンプルは探すと同じようなコードが沢山見つかりますが、この問題を解決する情報がなかなか見つからなかったんです。
が、まぁ 結局
デカけりゃ分割しちゃえば良いんですよね。至極シンプルな発想(笑)
あー そうそう、もう1つ問題あって、WebView の中の ScrollView をキャプチャするんですが、表示を1度もしていない部分はレンダリングされないみたいで、キャプチャしても何も描かれてません。
完全に表示している部分だけってわけでもなくて、少しその先まではレンダリングされているみたい。
これ、最初1ファイルでキャプチャしようとしたときに気がつきました。
カスタムキャッシュを止めたおかげで、SiteClipper もずいぶんとシンプルな実装になりました。
abc
これとは関係ないけどつべの仕様がまた変わりました。