2012年4月21日土曜日

AndroidでWebViewを使用する際の注意点

このエントリーをはてなブックマークに追加
Androidのアプリ内でWebViewを使用する際に、サイトページ内に、window.open(url)やwindow.location.href=urlを使用したが画面遷移があると、うまく画面遷移ができない。

解決策は、shouldOverrideUrlLoadingをオーバーライドして、各種サービスの起動を明記する。

下記例では、urlが、「mailto:」で始まった時はメールアプリを起動する暗黙的インテントを発行し、TwitterやFacebookのシェアボタンをタップした時には、画面遷移先を読み込むようにしている。

        wb = (WebView) findViewById(R.id.event_wb);
        wb.setWebChromeClient(new WebChromeClient());
        wb.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                Intent intent = null;
                if(url.substring(0, 7).equals("mailto:"))
                intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
                else if(url.contains("twitter") || url.contains("facebook"))
                    intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                if(intent != null) {
                    startActivity(intent);
                    webView.reload();   
                }
                return true;
            }
        });
        WebSettings settings = wb.getSettings();
        settings.setJavaScriptEnabled(true);