본문 바로가기
javascript

클라이언트 WebView

by Younji! 2019. 6. 26.

 

 

 iOS와 Android 네이티브 클라이언트에 결제 모듈을 연동을 하면서 소소한 부분 포스팅합니다.

Webview로 PG사 연동을 진행하면서 클라이언트에 Javascript로 결제 연동 결과 값을 내려주기까지 변경했던 코드를 조금 공유합니다. 🙂

<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
</head>
<body onload="callClient();"></body>
<script type='text/javascript'>
    function callClient() {
        /*<![CDATA[*/ var message = '${value}'; /*]]>*/
       
        if (window.webkit != undefined) {
            if (window.webkit.messageHandlers.payment != undefined) {
                window.webkit.messageHandlers.payment.postMessage(message)
            }
        }
        if (window.payment != undefined) {
            window.payment.postMessage(message)
        }
    }
</script>
</html>

 

# CDATA

 이 코드 이전에는 thymeleaf 템플릿을 쓰고 있었는데 (tmi) 지금은 freemarker를 쓰고 있습니다. (tmi2어쨌든 템플릿을 쓰고 있다는 얘기)

변수를 할당하기 위해서 CDATA 라는 녀석을 붙여줘야하는데 문자열이 아닌 것으로 인식하지 않기 위해 사용해야합니다.

제대로 된 json string을 내려주는 데 무엇이 문제인지 조금 걸렸습니다. 

템플릿 메뉴얼에 보니 모두 CDATA를 쓰고 있는 건 한참 뒤에 안 사실!

 

# MessageHandler

자바스크립트로 클라이언트 함수를 호출해야했던 건인데, iOS와 안드로이드 거의 동일한데 조금 다른 부분이 있었습니다.

 

Android ; `window.{인터페이스명}.{함수}`

iOS: `window.webkit.messageHandlers.{name}.postMessage(messageBody)`

 

어쨌든 두 클라이언트 모두 웹뷰 컨트롤러에 인터페이스를 정의해서 등록을 해야한다는 것.

 

결제 연동은 미끼였을 뿐 javascript를 이용해 클라이언트 함수를 실행하는 방법에 대해서 포스팅 마칩니다.

'javascript' 카테고리의 다른 글

Node.js  (0) 2016.08.29

댓글