투케이2K

241. (AndroidStudio/android/java) webview 웹뷰 window open 새창 열기 이벤트 감지 및 외부 링크로 전환 실시 본문

Android

241. (AndroidStudio/android/java) webview 웹뷰 window open 새창 열기 이벤트 감지 및 외부 링크로 전환 실시

투케이2K 2021. 12. 24. 13:24

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java

 

[소스 코드]

    // [크롬 클라이언트 설정 실시]
    main_webview.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            Log.i("---","---");
            Log.w("//===========//","================================================");
            Log.i("","\n"+"[A_Main >> onCreateWindow() :: 웹 브라우저 [window open] [a 태그 _blank 새창 열기] [열기] 이벤트 확인]");
            Log.i("","\n"+"[url :: "+String.valueOf(main_webview.getUrl())+"]");
            Log.w("//===========//","================================================");
            Log.i("---","---");

            // ----------------------------------

            // [웹뷰 설정 옵션]
            //main_webview.getSettings().setJavaScriptEnabled(true); // [자바스크립트 허용]
            //main_webview.getSettings().setDomStorageEnabled(true); // [웹 스토리지 허용]
            //main_webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // [window open 허용]
            //main_webview.getSettings().setSupportMultipleWindows(true); // [새창 띄우기 허용 :: onCreateWindow 호출 위함]

            // ----------------------------------

            WebView mWebViewPop = new WebView(view.getContext());
            mWebViewPop.setWebViewClient(new WebViewClient(){
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    Log.i("---","---");
                    Log.w("//===========//","================================================");
                    Log.i("","\n"+"[A_Main >> onCreateWindow() :: 웹 브라우저 [window open] [a 태그 _blank 새창 열기] [열기] 주소 감지 실시]");
                    Log.i("","\n"+"[수행 메소드 :: shouldOverrideUrlLoading()]");
                    Log.i("","\n"+"[url :: "+String.valueOf(url)+"]");
                    Log.w("//===========//","================================================");
                    Log.i("---","---");
                    
                    // [url 형식 체크 수행 실시]
                    if(url.contains("http://") || url.contains("https://")){
                        
                        // [외부 링크 이동 실시]
                        C_MoveApp.goChromeBrowser(A_Main.this, url);
                        return true;
                    } else {
                        return false;
                    }
                }
            });
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(mWebViewPop);
            resultMsg.sendToTarget();

            // ----------------------------------
            return true;
        }

        @Override
        public void onCloseWindow(WebView window) {
            Log.i("---","---");
            Log.w("//===========//","================================================");
            Log.i("","\n"+"[A_Main >> onCloseWindow() :: 웹 브라우저 [window open] [a 태그 _blank 새창 열기] [닫기] 이벤트 발생]");
            Log.w("//===========//","================================================");
            Log.i("---","---");
            super.onCloseWindow(window);
        }
    });

 

반응형
Comments