마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 WebView 2개 뒤로가기버튼 제어하기

0 추천

안드로이드 하이브리드 앱을 제작중입니다.

현재 웹뷰가 2개입니다.

일반 하이브리드 웹페이지를 보여주는 웹뷰와

이니시스 결제모듈 페이지를 보여주는 웹뷰가있습니다.

이니시스 결제페이지를 들어왔을때 뒤로가기버튼을 누르면 뒤로가게하고싶은데

지금 상태에서는 그냥 뒤로가기하면 일반 그 뒤에있는 웹페이지가 뒤로가기가 됩니다.

어떻게 따로따로 제어를 해야할가요??

 

 @Override
        public void onBackPressed() { //webView 뒤로가기버튼

            long tempTime = System.currentTimeMillis();
            long intervalTime = tempTime - backPressedTime;

            if(mWebView.canGoBack()){

                if(mWebView.getUrl().equals(MainURL+"loginMain.do")){
                    if (0 <= intervalTime && FINISH_INTERNAL_TIME >= intervalTime) finish();

                    else {
                        backPressedTime = tempTime;
                        Toast.makeText(getApplicationContext(), "한번 더 누르면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show();
                    }
                }
                else if(mWebView.getUrl().equals(MainURL+"main.user")){
                    if (0 <= intervalTime && FINISH_INTERNAL_TIME >= intervalTime) finish();

                    else {
                        backPressedTime = tempTime;
                        Toast.makeText(getApplicationContext(), "한번 더 누르면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show();
                    }
                }
                else if(mWebView.getUrl().equals(MainURL+"orderList.user")){
                    mWebView.loadUrl(MainURL+"main.user");
                }

                else {
                    mWebView.goBack();
                }
            }
            else{
                super.onBackPressed();
            }
    }

현재 이게 일반 페이지 보여주는 웹뷰 뒤로가기버튼이구요.

@Override
            public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {

                Log.d("팝업", "팝업");

                // window.opener 시
                mWebViewPop = new WebView(view.getContext());
                mWebViewPop.getSettings().setJavaScriptEnabled(true);
                mWebViewPop.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
                mWebViewPop.getSettings().setSupportMultipleWindows(true);
                mWebViewPop.getSettings().setDomStorageEnabled(true);

                mWebViewPop.setWebChromeClient(new WebChromeClient(){
                    @Override
                    public void onCloseWindow(WebView window) {
                        window.setVisibility(View.GONE);
                        mWebView.removeView(window);
                    }
                });

                mWebViewPop.setWebViewClient(new SslWebViewConnect());
                mWebViewPop.setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT));
                mContainer.addView(mWebViewPop);

                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;

                transport.setWebView(mWebViewPop);
                resultMsg.sendToTarget();
                return true;
            }

이건 새로운 창을 보여주는 또다른 웹뷰를 생성하는 곳입니다.

이 새롭게 생성한곳을 뒤로가기 하고싶습니다.

 

darkroyal (810 포인트) 님이 2019년 12월 5일 질문

1개의 답변

0 추천
onBackPressed 에서 우선 순위를 결제 웹뷰에 먼저 두고 if (billingWebView.canGoBack()) 값이 true 일 경우

billingWebView.goBack() 를 call 하는 형태로 구성하고 false 일 경우 원래의 webview 를 제어하면 됩니다.
aucd29 (218,390 포인트) 님이 2019년 12월 10일 답변
그걸로는 팝업이 닫히진 않더라구요..
팝업이요?
일단 addView 되어 있으니 removeView 처리를 해주어야 합니다.
ps. 제거를 제어라고 적었네요 ㄷ ㄷ 오타가 있네요
...