読者です 読者をやめる 読者になる 読者になる

Zinc #27 簡易的なWebフィルタリング(WebView.stopLoadingでロードを停止)

簡易的なWebフィルタリングをしてみる・・・。
前回、ロードされるリソースのURLがわかったので、今回は、ロードされるリソースが画像だったらロードを停止する・・・。

こんな感じで、JpegPNG、Gifだったらview.stopLoadingでロードを停止・・・。

f:id:BG1:20160729180017p:plain

Yahooを開く・・・。

f:id:BG1:20160729180049p:plain

あまりにもブロックしすぎて何も表示されなくなったか・・・。
いや、違う・・・。
おそらく、view.stopLoadingはwebView全体のローディングを止めてしまうのではないだろうか・・・。
なので、画像が1つでも見つかると、webView全体のロードが止まるので、ブロック対象外のHTMLでもロードされないのではないだろうか・・・。

もう一回ロードしてみる・・・。

f:id:BG1:20160729180337p:plain

Yahooのロゴは何形式なんだろうか・・・。
それとも、ブロックに漏れがあるのか・・・。

それ以外はまだロードされてない・・・。

f:id:BG1:20160729180433p:plain

もう一回ロードをすると、画像は表示されず、それ以外のテキストは表示された・・・。
キャッシュしている部分はそのままに、まだロードしていないテキストがロードされたのだろうか・・・。

最初の方で、「ロードされるリソースが画像だったらロードを停止する」と言った・・・。
たしかに、「画像だったらロードを停止した」という条件にはあてはまるが、
Webフィルタリングというイメージからすると、「画像だったら、その画像のロードを停止し、それ以外はロードする」という風にしてほしいもの・・・。
しかも、何度もリロードしていると、画像もロードされてしまっている感じだった・・・。漏れが発生している模様・・・。

どうやら、Chromeのキャッシュを消すと、また画像は表示されなくなった・・・。
それから、調べてみるとiframeやAjaxで取ってきたファイルなどについてはonLoadResourceは関知できないような感じ・・・。
↓を見ると、この辺の動作についてはAndroidのバージョンごとで違う模様・・・。

[メモ]Android WebViewでの処理 ヤメ記者SEの徒然なるままに…/ウェブリブログ

これでは、ある特定条件のファイルをブロックし、それ以外をブロックしないというフィルタの実装とは言い難い・・・。
しかし、WebViewにはstopLoadingしかなさそうなので、何か別の方法があるかさらなる調査が必要そうだ・・・。

まあ、今回はあくまでも簡易的なフィルタなので、これぐらいで・・・。

https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc