2013년 6월 4일 화요일

[Android] WebView 에서 자바스크립트 실행하기

안드로이드 하이브리앱을 만들다보니
자바스크립트를 따로 지정해주지 않으면 실행되지 않는다는 걸 알고
급하게 찾은 ....
// 웹뷰를 만들고
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;
  }

 }


<출처 : http://shinehand.egloos.com/456203 [shinehand님 블로그]>

댓글 없음:

댓글 쓰기

문의하기

이름

이메일 *

메시지 *