투케이2K

424. (kotlin/코틀린) Webview 웹뷰에서 window open 윈도우 오픈 새창 열기 이벤트 감지 수행 본문

Kotlin

424. (kotlin/코틀린) Webview 웹뷰에서 window open 윈도우 오픈 새창 열기 이벤트 감지 수행

투케이2K 2023. 10. 23. 09:21
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

            // -----------------------------------------
            // TODO [JavaScript 의 window.open 허용]
            // -----------------------------------------
            main_webview!!.settings.javaScriptCanOpenWindowsAutomatically = true
            main_webview!!.settings.setSupportMultipleWindows(true) // [새창 띄우기 허용]
            // -----------------------------------------




            // -----------------------------------------
            // TODO [크롬 클라이언트 설정 실시]
            // -----------------------------------------
            main_webview!!.webChromeClient = object : WebChromeClient() {

                // TODO [웹뷰 [window open] 새창 열기 이벤트 확인]
                override fun onCreateWindow(view: WebView, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message): Boolean {
                    S_Log._F_(this@A_Webview, "웹뷰 [window open] 새창 열기 이벤트 발생", null)

                    val mWebViewPop = WebView(view.context)
                    mWebViewPop.webViewClient = object : WebViewClient() {
                        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                            S_Log._F_(this@A_Webview, "웹뷰 [window open] 새창 열기 주소 확인", arrayOf(
                                "URL :: $url"
                            ))

                            // [url 체크 수행 실시]
                            if (url.contains("http://") || url.contains("https://")) {

                                // [외부 링크 이동]
                                C_MoveApp.goChromeBrowser(this@A_Webview, url)
                            }
                            return true // [로직 종료]
                        }
                    }

                    val transport = resultMsg.obj as WebViewTransport
                    transport.webView = mWebViewPop
                    resultMsg.sendToTarget()

                    // -------------------------------------------------------------
                    return true // [로직 종료]
                    // -------------------------------------------------------------
                }


                // TODO [웹뷰 [window close] 새창 닫기 이벤트 확인]
                override fun onCloseWindow(window: WebView?) {
                    S_Log._F_(this@A_Webview, "웹뷰 [window close] 새창 닫기 이벤트 확인", null)
                    try {
                        //window.setVisibility(View.GONE);
                        //window.destroy();
                    } catch (e: Exception) {
                    }
                    super.onCloseWindow(window)
                }

            }
            // -----------------------------------------

 

반응형
Comments