Denen blog

株式会社電縁の社員によるブログです。

Android の WebView でも alert や confirm に対応してみた

f:id:yasuaki-sakai:20190213110415p:plain

こんにちは、イノベーションオフィスの吉田です。

最近くしゃみがよく出るのですが皆さんは大丈夫でしょうか?

先日の Swift に続き今度は Android も触る機会が有ったのでまとめてみたいと思います。

Swift の記事はこちらです。

denen.hatenablog.com

 

というわけで、Android の WebView もそのままでは alert や confirm に対応してくれていないので実装していきましょう。

早速コードです。

private WebView webView1;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView1 = new WebView(this);
    webView1.getSettings().setJavaScriptEnabled(true);
    webView1.getSettings().setUserAgentString("My Browser App");

    webView1.setWebViewClient(new WebChromeClient()  {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp.getContext())
                    .setTitle("My Browser App")
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    result.cancel();
                                }
                            })
                    .create()
                    .show();
                return true;
        }
@Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(myApp.getContext()) .setTitle("My Browser App") .setMessage(message) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .create() .show(); return true; } }); setContentView(webView1); webView1.loadUrl("https://www.google.co.jp/"); }

ちょっと長いですが、そんなに難しいことはやっていないかと思います。

setWebViewClient というメソッドに onJsAlert や onJsConfirm というメソッドを持った WebChromeClient クラスを渡してやる感じですね。

 

そして Android だと AndroidManifest.xml に以下の記述を入れるのを忘れないようにしてください。

    <uses-permission android:name="android.permission.INTERNET" />

以上、参考になれば幸いです。

 

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain