차근차근/Android

[ANDROID]WebView 팝업 처리

예쁜꽃이피었으면 2014. 8. 26. 12:24

http://shinehand.egloos.com/456203


웹에서 팝업을 띄우는 것을 Android WebView를 통해서 보여지게 만들 것이다

간단하게 알림창 같은것을 띄우면 되는데 처음에는 어떻게 처리를 해야 하는지 몰라서 고생했다
하지만 매우 쉽게 해결 되면서 허탈하게 만든 부분 이랄까....
해결은 WebChromeClient 를 통해서 했다

//우선 사용하는 웹뷰를 id를 통해서 가지고 온다 
//물론 웹뷰는 xml로 미리 생성을 한다.
WebView testWebView = (WebView)findViewById(R.id.testWeb);

// 구글에서 제공하는 크롬클라이언트를 생성한다.
WebChromeClient testChromeClient = new WebChromeClient();

//생성한 크롬 클라이언트를 웹뷰에 셋한다
testWebView .setWebChromeClient( testChromeClient  );

이렇게 별거 없이 크롬 클라이언트를 생성해서 넣는 것 만으로 팝업이 된다
문제는 팝업이 되기는 하나 팝업에 IP가 찍혀 나오는 문제가 있다는 것이다 

그래서 크롬 클라이언트를 상속받아서 클래스를 생성한다
그리고 onJsAlert, onJsConfirm 를 재 설정하여 원하는 팝업이 나올수 있게 만들어 준다

public class HelloWebChromeClient extends WebChromeClient {

  @Override
  public boolean onCreateWindow(WebView view, boolean dialog,
    boolean userGesture, Message resultMsg) {
   // TODO Auto-generated method stub
   return super.onCreateWindow(view, dialog, userGesture, resultMsg);
  }
  
  
  @Override
  public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
   
   // TODO Auto-generated method stub
   //return super.onJsAlert(view, url, message, result);
    new AlertDialog.Builder(view.getContext())
        .setTitle("알림")
        .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;
  }

  @Override
  public boolean onJsConfirm(WebView view, String url, String message,
    final JsResult result) {
   // TODO Auto-generated method stub
   //return super.onJsConfirm(view, url, message, result);
   new AlertDialog.Builder(view.getContext())
        .setTitle("알림")
        .setMessage(message)
        .setPositiveButton("네",
              new AlertDialog.OnClickListener(){
                 public void onClick(DialogInterface dialog, int which) {
                  result.confirm();
                 }
              })
        .setNegativeButton("아니오", 
          new AlertDialog.OnClickListener(){
                public void onClick(DialogInterface dialog, int which) {
                 result.cancel();
                }
             })
        .setCancelable(false)
        .create()
        .show();
   return true;
  }

 }

이렇게 하면 Title에 알림이 뜨고 밑에 메시지가 뜨게 될것이다
두개의 함수가 정확이 어떻게 사용되는지 알고 싶으시다면 구글링 으로 고고고 ㅋ

반응형