13000

[code]

    package com.example.makki.webviewex;
    
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    
    
    public class WebViewEx extends ActionBarActivity {
    
        //メニューアイテムID
        private static final int MENU_ITEM0 = 0;
        private static final int MENU_ITEM1 = 1;
        private static final int MENU_ITEM2 = 2;
        private static final int MENU_ITEM3 = 3;
        private WebView webView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web_view_ex);
    
            //Weビューの作成
            webView = new WebView(this);
            WebSettings settings = webView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setSupportZoom(false);
    
            //リンクをタップしたときに標準ブラウザを起動させない
            webView.setWebViewClient(new WebViewClient());
    
            //Weビューの通知リクエストの処理
            webView.setWebViewClient(new WebViewClient() {
                //URジャンプ時前に呼ばれる
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    //外部ブラウザではなく内部ブラウザを利用
                    return false;
                }
    
                //エラー時に呼ばれる
                @Override
                public void onReceivedError(WebView view, int errorCode,
                                            String description, String url) {
                    toast("通信エラーです。");
                }
            });
            setContentView(webView);
    
            //HTMの読み込み
            webView.loadUrl("http://hakuhin.jp/js/dialog.html#DIALOG_00");
        }
    
        //トーストの表示
        private void toast(String text) {
            if (text == null) text = "";
            Toast.makeText(this, text, Toast.LENGTH_LONG).show();
        }
    
        //オプションメニューの生成
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_web_view_ex, menu);
    
            //オプションメニューへのアイテム0追加
            MenuItem item0 = menu.add(0, MENU_ITEM0, 0, "ログイン");
            item0.setIcon(android.R.drawable.ic_menu_camera);
    
            //オプションメニューへのアイテム0追加
            MenuItem item1 = menu.add(0, MENU_ITEM1, 0, "項目１");
            item0.setIcon(android.R.drawable.ic_menu_camera);
    
            //オプションメニューへのアイテム0追加
            MenuItem item2 = menu.add(0, MENU_ITEM2, 0, "項目２");
            item0.setIcon(android.R.drawable.ic_menu_camera);
    
            //オプションメニューへのアイテム0追加
            MenuItem item3 = menu.add(0, MENU_ITEM3, 0, "押してはいけない");
            item0.setIcon(android.R.drawable.ic_menu_camera);
    
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int itemId = item.getItemId();
            if (itemId == MENU_ITEM0) {
                toast("ログインを押した");
                webView.loadUrl("https://accounts.google.com/login?hl=ja");
    
                webView.reload();
            } else if (itemId == MENU_ITEM3) {
                toast("ダメよダメダメ");
            }
    
            //noinspection SimplifiableIfStatement
            if (itemId == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    
[/code]

質問です。  
`WebView`でJavaScriptのダイアログを表示させるには何が必要でしょうか？

プロジェクトのMinimumSDKは4.1にしてあります。本体のバージョンは5.1.1でクロームから  
ダイアログは表示されます。


CC BY-SA 3.0
2015-08-03T07:38:45.907
12986
2015-08-03T15:19:19.500
2015-08-03T14:54:29.013
7290
10715
question
javascript android android-studio android-webview
WebViewでJavaScriptのダイアログを表示させたい

[code]

    webView.setWebChromeClient(new WebChromeClient());
    
[/code]

の設定がないのが原因かと思います。`WebChromeClient`については、[公式の`WebView`のリファレンス](http://developer.android.com/intl/ja/reference/android/webkit/WebView.html)を参照ください。

* * *

余談ですが、Android5.0以降では、`WebView`はSDKの一部ではなくなり、`Android System
WebView`として外部から提供されるようになりました。これは`WebView`起因の脆弱性に対し、古いOS（といっても5.0以降に限定されますが）でも対応可能にするためだと思います。

この`Android System
WebView`の一部のバージョンだと[`JavaScript`からのアラート表示が機能しない](https://code.google.com/p/chromium/issues/detail?id=447607)という不都合が報告されています。現在では修正されているはずなので、本件には関係ないかと思います。


CC BY-SA 3.0
2015-08-03T15:19:19.500
13000
2015-08-03T15:19:19.500
5337
12986
answer