웹뷰까지 생성하고 테스트를 하다보면 이상한 점을 발견할 수 있습니다.


바로 자바스크립트 alert과 confirm이 동작하지 않는것 입니다. 


여기서는 일부 자바스크립트 동작을 원할하게 할수 있도록 하는 개발을 소개 합니다.









1. MainActivity 자바 클래스를 아래와 같이 수정해줍니다.


public class MainActivity extends AppCompatActivity {


    WebView mWebView;

    TextView errorVeiw;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        FirebaseMessaging.getInstance().subscribeToTopic("notice");

        

      

        errorVeiw = (TextView) findViewById(R.id.net_error_view);


        mWebView = (WebView) findViewById(R.id.activity_main_webview);


        WebSettings webSettings = mWebView.getSettings();

        webSettings.setJavaScriptEnabled(true);


        mWebView.setWebViewClient(new WebViewClient() {


            @Override

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url);

                return true;

            }


            //네트워크연결에러

            @Override

            public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {


                switch(errorCode) {

                    case ERROR_AUTHENTICATION: break;               // 서버에서 사용자 인증 실패

                    case ERROR_BAD_URL: break;                           // 잘못된 URL

                    case ERROR_CONNECT: break;                          // 서버로 연결 실패

                    case ERROR_FAILED_SSL_HANDSHAKE: break;    // SSL handshake 수행 실패

                    case ERROR_FILE: break;                                  // 일반 파일 오류

                    case ERROR_FILE_NOT_FOUND: break;               // 파일을 찾을 수 없습니다

                    case ERROR_HOST_LOOKUP: break;           // 서버 또는 프록시 호스트 이름 조회 실패

                    case ERROR_IO: break;                              // 서버에서 읽거나 서버로 쓰기 실패

                    case ERROR_PROXY_AUTHENTICATION: break;   // 프록시에서 사용자 인증 실패

                    case ERROR_REDIRECT_LOOP: break;               // 너무 많은 리디렉션

                    case ERROR_TIMEOUT: break;                          // 연결 시간 초과

                    case ERROR_TOO_MANY_REQUESTS: break;     // 페이지 로드중 너무 많은 요청 발생

                    case ERROR_UNKNOWN: break;                        // 일반 오류

                    case ERROR_UNSUPPORTED_AUTH_SCHEME: break; // 지원되지 않는 인증 체계

                    case ERROR_UNSUPPORTED_SCHEME: break;          // URI가 지원되지 않는 방식

                }

                super.onReceivedError(view, errorCode, description, failingUrl);


                mWebView.setVisibility(View.GONE);

                errorVeiw.setVisibility(View.VISIBLE);

            }

        });



       mWebView.setWebChromeClient(new WebChromeClient() {


            //alert 처리

            @Override

            public boolean onJsAlert(WebView view, String url, String message, final JsResult 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;

            }



            //confirm 처리

            @Override

            public boolean onJsConfirm(WebView view, String url, String message,

                                       final JsResult result) {

                new AlertDialog.Builder(view.getContext())

                        .setTitle("알림")

                        .setMessage(message)

                        .setPositiveButton("Yes",

                                new AlertDialog.OnClickListener(){

                                    public void onClick(DialogInterface dialog, int which) {

                                        result.confirm();

                                    }

                                })

                        .setNegativeButton("No",

                                new AlertDialog.OnClickListener(){

                                    public void onClick(DialogInterface dialog, int which) {

                                        result.cancel();

                                    }

                                })

                        .setCancelable(false)

                        .create()

                        .show();

                return true;

            }

        });


        mWebView.loadUrl("http://m.naver.com");


    }

}

 















[목차]


1. 프로젝트 생성 하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 1


2. 푸시 사용 준비하기 (FCM) - 안드로이드 모바일웹으로 하이브리드앱 만들기 2


3. 푸시 기능 만들기 (FCM) - 안드로이드 모바일웹으로 하이브리드앱 만들기 3


4. 푸시 테스트 하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 4


5. 웹뷰추가하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 5


6. 웹뷰에서 자바스크립트 동작 처리하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 6


7. 뒤로 버튼 눌렀을때 동작 처리하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 7


8. 인트로(스플레시) 만들기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 8


9. 아이콘 설정하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 9


10. 테스트용 APK 추출하기 - 안드로이드 모바일웹으로 하이브리드앱 만들기 10









copyright (c) 2017 워크식스

  1. 김동학 2017.10.20 23:26 신고

    수정을했는데요, 버튼이 안눌리네요 ㅠ 올리신 그대로 했는데 ㅠㅠ

+ Recent posts