2011年6月7日火曜日

Android WebViewメモ

WebViewについてのメモ。

・戻るボタン押されたときに、前のページに戻す

ActivityのonKeyDownのオーバライドする
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN
                && keyCode == KeyEvent.KEYCODE_BACK
                && webview.canGoBack() == true) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

・ロードするURLに応じて処理をさせる

WebViewClientを継承してonLoadResourceに処理実装する。それをWebViewにセット。
        webview.setWebViewClient(new MyWebViewClient());
・・・
    public class MyWebViewClient extends WebViewClient {
        @Override
        public void onLoadResource(WebView view, String url) {
            if(!url.startsWith("http://example.com")) {
                Toast.makeText(getApplicationContext(), "外部サイトす。" , Toast.LENGTH_SHORT).show();
            }
        }
    }
example.com以外のサイトでは外部サイトとToast表示させる。例としては微妙だけど。。

WebViewClientで他にもいろいろできそう。onPageStartedとかonPageFinishedなどある。
上の例はonLoadResourceじゃなくてonPageStartedのがいいのかな。呼ばれる順番は下記のとおり。
05:37:39.808: DEBUG/MyWebViewClient(977): onPageStarted
05:37:39.888: DEBUG/MyWebViewClient(977): onLoadResource
05:37:40.938: DEBUG/MyWebViewClient(977): onPageFinished

以上、とりあえずメモ。

※追記
リダイレクト時(a.php→a.html)の挙動。
06:24:27.138: DEBUG/MyWebViewClient(1108): onPageStarted a.php
06:24:27.184: DEBUG/MyWebViewClient(1108): onLoadResource a.php
06:24:27.257: DEBUG/MyWebViewClient(1108): onPageStarted a.html
06:24:27.397: DEBUG/MyWebViewClient(1108): onPageFinished a.html
リダイレクト元URLのonPageFinishedは呼ばれず、リダイレクト先URLではonLoadResourceは呼ばれない。