차근차근/Android

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

예쁜꽃이피었으면 2015. 1. 28. 09:14

http://devkamui.blogspot.kr/2013/06/android-webview.html


안드로이드 하이브리앱을 만들다보니 
자바스크립트를 따로 지정해주지 않으면 실행되지 않는다는 걸 알고 
급하게 찾은 .... 
  1. // 웹뷰를 만들고  
  2. WebView testWebView = (WebView)findViewById(R.id.testWeb);  
  3.   
  4. // 구글에서 제공하는 크롬클라이언트를 생성한다.  
  5. WebChromeClient testChromeClient = new WebChromeClient();  
  6.   
  7. //생성한 크롬 클라이언트를 웹뷰에 셋팅한다  
  8. testWebView .setWebChromeClient( testChromeClient  );  
이렇게 별거 없이 크롬 클라이언트를 생성해서 넣는 것 만으로 팝업이 된다
문제는 팝업이 되기는 하나 팝업에 IP가 찍혀 나오는 문제가 있다는 것이다 

그래서 크롬 클라이언트를 상속받아서 클래스를 생성한다
그리고 onJsAlert, onJsConfirm 를 재 설정하여 원하는 팝업이 나올수 있게 만들어 준다
  1. public class HelloWebChromeClient extends WebChromeClient {  
  2.   
  3.   @Override  
  4.   public boolean onCreateWindow(WebView view, boolean dialog,  
  5.     boolean userGesture, Message resultMsg) {  
  6.    // TODO Auto-generated method stub  
  7.    return super.onCreateWindow(view, dialog, userGesture, resultMsg);  
  8.   }  
  9.     
  10.     
  11.   @Override  
  12.   public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {  
  13.      
  14.    // TODO Auto-generated method stub  
  15.    //return super.onJsAlert(view, url, message, result);  
  16.     new AlertDialog.Builder(view.getContext())  
  17.         .setTitle("알림")  
  18.         .setMessage(message)  
  19.         .setPositiveButton(android.R.string.ok,  
  20.               new AlertDialog.OnClickListener(){  
  21.                  public void onClick(DialogInterface dialog, int which) {  
  22.                   result.confirm();  
  23.                  }  
  24.               })  
  25.         .setCancelable(false)  
  26.         .create()  
  27.         .show();  
  28.    return true;  
  29.   }  
  30.   
  31.   @Override  
  32.   public boolean onJsConfirm(WebView view, String url, String message,  
  33.     final JsResult result) {  
  34.    // TODO Auto-generated method stub  
  35.    //return super.onJsConfirm(view, url, message, result);  
  36.    new AlertDialog.Builder(view.getContext())  
  37.         .setTitle("알림")  
  38.         .setMessage(message)  
  39.         .setPositiveButton("네",  
  40.               new AlertDialog.OnClickListener(){  
  41.                  public void onClick(DialogInterface dialog, int which) {  
  42.                   result.confirm();  
  43.                  }  
  44.               })  
  45.         .setNegativeButton("아니오",   
  46.           new AlertDialog.OnClickListener(){  
  47.                 public void onClick(DialogInterface dialog, int which) {  
  48.                  result.cancel();  
  49.                 }  
  50.              })  
  51.         .setCancelable(false)  
  52.         .create()  
  53.         .show();  
  54.    return true;  
  55.   }  
  56.   
  57.  }  

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


반응형