안드로이드 웹뷰에서 alert()를 두고 터치하면 반응이 없다.
웹뷰에서 자바스크립트 사용한다는 아래 한 줄로 경고창이 뜨지 않는다.
mWebView.getSettings().setJavaScriptEnabled(true);
웹뷰는 이를 지원하지않는 것이다. 해답은 직접 구현하는 것으로!
mWebView.setWebChromeClient(new WebChromeClient());
를 넣어주거나 아래 코드와 같이 WebChromeClient 클레스를 상속해서 내용을 구현해 줄 필요가있다. 그 내용은 당연히 경고창 모양을 가지는 대화상자가 되어야 한다.
void initWebView() {
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient_sub());
mWebView.setWebChromeClient(new WebChromeClient_sub());
/** window.AndroidInterface.onPageOpen("www.google.com"); // Call onPageOpen() function from javascript */
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
String url = "file:///android_asset/index.html";
mWebView.loadUrl(url);
}
private class WebViewClient_sub extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
public class WebChromeClient_sub extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) {
// new AlertDialog.Builder(mContext)
//// .setTitle("Alert title")
// .setMessage(message)
// .setPositiveButton(android.R.string.ok,
// new AlertDialog.OnClickListener() {
// public void onClick(DialogInterface dialog, int which) {
// result.confirm();
// }
// })
// .setCancelable(false)
// .create()
// .show();
// return true;
return super.onJsAlert(view, url, message, result);
}
}
위에서 return super.onJsAlert(view, url, message, result);를 주석처리하고 주석부분을 풀면 커스터마이징된 경고창으로 탈바꿈된다.
index.html파일은 아래와 같다.
<html>
<head>
<title>WebView Test</title>
</head>
<body>
<h1>WebView Test</h1>
<a href="javascript:alert('Test');">Alert Test</a><br/>
<a href="javascript:alert2('Test2');">Alert2 Test2</a><br /><br />
</body>
</html>
위 html파일은 안드로이드 스튜디오 해당 프로젝트 assets폴더에 둔다.