ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드 kotlin] webview 에 팝업 나타나게 하기
    안드로이드(kotlin)/UI 2022. 9. 19. 12:00

    webview 작업을 하는데 웹브라우저에서는 잘 나타나는 popup 이 webview 에서는 안나타나는 증상이 있어습니다.

    왜 이런건가 알아보니까 WebChromeClient 를 추가해줘야 popup 이 나타난다고 하네요.

     

    onCreate 메서드 안에 아래 코드를 추가하니까 popup 이 잘 나타납니다.

    val chromeClient = WebChromeClient()

    만약 웹브라우저에서 만든 popup 외에 안드로이드에서 직접 만들어서 표시하고싶은 경우에는 WebChromeClient 를 상속 받아서 직접 구현하면 됩니다.

     

    class MyWebChromeClient: WebChromeClient() {
        override fun onCreateWindow(
            view: WebView?,
            isDialog: Boolean,
            isUserGesture: Boolean,
            resultMsg: Message?
        ): Boolean {
            return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg)
        }
    
        override fun onJsAlert(
            view: WebView?,
            url: String?,
            message: String?,
            result: JsResult?
        ): Boolean {
    //        return super.onJsAlert(view, url, message, result)
            AlertDialog.Builder(view?.context, R.style.webviewAlertDialog)
                .setTitle("알림")
                .setMessage(message)
                .setPositiveButton("ok", DialogInterface.OnClickListener { dialog, which ->
                    result?.confirm()
                })
                .setCancelable(false)
                .create()
                .show()
    
            return true
        }
    
        override fun onJsConfirm(
            view: WebView?,
            url: String?,
            message: String?,
            result: JsResult?
        ): Boolean {
    //        return super.onJsConfirm(view, url, message, result)
            AlertDialog.Builder(view?.context, R.style.webviewAlertDialog)
                .setTitle("알림")
                .setMessage(message)
                .setPositiveButton("확인", DialogInterface.OnClickListener { dialog, which ->
                    result?.confirm()
                })
                .setCancelable(false)
                .create()
                .show()
    
            return true
        }
    }

    이런식으로 클래스를 하나 만든 뒤에 사용할 곳에서 호출하여 사용하면 됩니다.

    val chromeClient = MyWebChromeClient()

    위에서는 WebChromeClient 를 불러왔지만 직접 만든 내용을 불러와서 쓰면 커스텀 다이얼로그를 적용할 수 있습니다.

    댓글

Designed by Tistory.