Upload
bg1-333
View
166
Download
0
Embed Size (px)
Citation preview
ブラウザはつくるもんじゃないつかうものだ
2016 年 11 月 20 日devcussion
2016 年 12 月 03 日わんくま勉強会東京
B.G
注意
※ この発言は個人の見解であり、所属する組織の公式見解ではありません
自己紹介 (1) HN: B.G TwitterID:
@miu_hiro_( メイン , 仕事だけだったはずが・・・。 )@bg1_333( 元メイン , 同人関係その他 )
Blog: 車輪の x 発明 ~B.G's Blog~
(http://bg1.hatenablog.com/)
自己紹介 (2) 言語・環境など :
C++( とくに C++1x) わかりませんC# わかりません Java わかりませんWin32 マンAndroid わかりません でも最近は Android(Java) やらされてるマン
おしらせ
GPDWIN買いました投資しました
GPDWIN User GroupたてましたSlack
https://gpd-win-ug.slack.com/
GPD WIN Advent Calendar 2016
http://www.adventar.org/calendars/1529
VizCommandhttps://github.com/bg1bgst333/VizCommand
あと、こういうのつくってる
Android わからないマンがブラウザを作ることになったというお話
画面どうする ?
Web ページの画面は?↓
WebView(Zinc #2 WebViewの設置)
※ 他に ChromeView 、 ChromeCustomTabs 、 Crosswalk 、あとは Chromium を載せるとか ?
URL バーは ?
ありません↓
自前でエディットテキストで実装(Zinc #2 WebViewの設置)
(Zinc #8 リンク先URLをURLバーに反映)
Chrome を起動させない特定のページで Chrome にリダイレクトしちゃう
↓
WebViewClient をオーバーライドして false を返す(Zinc #3 一部のサイトでChrome
にリダイレクトする動作を防止)
ブックマークは ?
ありません(Android6.0 で消えました )
Android 6.0 Changes | Android Developers
↓
自前で DB 実装(Zinc #6 ブックマークDBテーブルへの登録)
http 入れるのめんどいロード時の http 補完と表示時の http 省略
↓
自前で実装( Zinc #9 ロード時のhttp補完および表示時のhttp
省略)
履歴は ?
ありません(WebBackForwardList はいわゆる通算の履歴ではありません )
WebBackForwardList | Android Developers
↓
自前で DB 実装( Zinc #12 履歴機能の実装)
リターン押したらロード開始URL バー入力してリターンしたらロードしたい
↓
OnEditorAction(Zinc #13 URLバー内でのEnterキーでWeb
ページをロード)
回転したら消えちゃう回転止めちゃえばいい
↓
configChanges(Zinc #17 回転時のActivity再生成により
WebViewの内容が消える問題の対策 その2)
ページ内検索検索したい
↓
SearchView とか OnQueryTextListener (Zinc #18 ページ内検索の実装)
タブブラウザにするには ?FragmentTabHost かな?
↓
WebView 状態が保持できないし、タブを 1 つだけ削除ができない ( 全削除のみ )なので結局タブはなくして Fragmentだけに(Zinc #21 タブの削除)
(Zinc #35 タブの切り替え)
URL フィルタリング特定の URL でブロックしたい
↓
loadUrl 前にチェックして stopLoading(Zinc#27 簡易的なWebフィルタリング(
WebView.stopLoadingでロードを停止))
URL フィルタリング その 2WebViewClient の中でブロックしたい
↓
shouldOverrideUrlLoading とか onLoadResourceでチェックして stopLoading( 単に true 返すと固まった )
(Zinc#27 簡易的なWebフィルタリング(WebView.stopLoadingでロードを停止))
URL フィルタリング その 3
フィルタリング API がサーバだったら非同期 HTTP リクエストしないと↓
非同期関数の同期化(syncronized わからないマン )
URL フィルタリング その 4
変なところで stopLoading すると固まる↓
ローカル HTML を loadUrl して流してあげてその上にブロックフラグメントかぶせる↓先日試したら再現しなかったので関係なかった
URL フィルタリング その 5
AsyncTaskLoader でつくってたら↓
CountDownLatch というのがあるらしい([Android] 何人かの非同期処理を待ち合わせる |
アドカレ2013 : SP #23 ...)
URL フィルタリング その 6
バックキーで戻るとリダイレクトのタイミング次第で表示されるときがある↓
戻る場合は shouldOverrideUrlLoading 通らないので、 onPageStarted でブロックしたほうが確実だった
HTTP レスポンスとかエラーとかonReceivedError とか
onReceivedHttpError とかあったのか
↓
これでリダイレクト制御すればよかったかも
フィルタリングサーバどこがいいかな
↓
とりあえずGoogle Safe Browsing?
( 試してないけど )(Google Safe Browsing | Google Developers)
まとめ
他のブラウザ作ってる人どうしてるんでしょうか?Chromium 載せてるのかな・・・。
Xamarin で作る場合とかどうするんでしょうか?教えていただきたい
https://github.com/bg1bgst333/Zinc