본문 바로가기
개발노트/iOS

[Swift]JavaScript < ㅡ > Native 통신

by 전지적진영시점 2023. 2. 17.
반응형
JavaScript -> Native 함수 호출하기

 

지난 포스팅에서는 Kotlin에서 javaScript 통신 하는 방법을 알아보았습니다.

이번 포스팅에서는 Swfit에서 javaScript 통신 하는 방법을 알아보겠습니다.

 

기본적인 webView 셋팅은 생략하고 js통신에 필요한 셋팅만 짚고 넘어가겠습니다.

 

ViewDidLoad() 에 javaScript <-> native 간 통신을 위해 셋팅을 해주겠습니다.

override func viewDidLoad() {
        super.viewDidLoad()
        
        webView.configuration.userContentController.add(self, name: "a")
        webView.configuration.userContentController.add(self, name: "b")
        webView.configuration.userContentController.add(self, name: "c")
        webView.configuration.userContentController.add(self, name: "d")
        webView.configuration.userContentController.add(self, name: "e")
        webView.configuration.userContentController.add(self, name: "f")
        webView.configuration.userContentController.add(self, name: "g")
        webView.configuration.userContentController.add(self, name: "h")
        webView.configuration.userContentController.add(self, name: "i")

 

configuration 은 WkWebView를 초기화하기 위한 속성 모음입니다.

 

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage){
        print(message.name, message.body)
        
        switch message.name {
            
        case "a":
            a(phoneNum: message.body as! String)
            
        case "b":
            b(phoneNum: message.body as! String)
            
            //contents 외 카드뉴스
        case "a":
            b(url: message.body as! String)
            
        default:
            break
        }
    }

 

그리고

    

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage){

 

위 함수를 사용하여 스크립트 단에서 날라오는 메세지를 캐치하겠습니다. 

위 함수는 웹페이지에서 핸들러에게 스크립트 단에서 메세지를 보냈다고 알려줍니다.

 

위 함수의 매개변수를 보면

 

userContentController

메세지를 전달하는 사용자 컨텐츠 컨트롤러

 

message

메세지의 세부 내용이 담긴 개체 입니다.

 

 

여기까지 하면 native 소스 셋팅은 끝이고 서버에서는 앱 함수를 어떻게 부르냐면

 

window.webkit.messageHandlers.a.postMessage();

 

이렇게 불러주면 됩니다.

 

반대로 Native에서 javaScript 함수를 호출하려면

 

 

Native -> JavaScript 함수 호출하기

 

let requestString = "javascript:a()"
                
self.webView.evaluateJavaScript(requestString, completionHandler: nil)

 

 

WkwebView 에 내장되어 있는 evaluateJavaScript 메서드를 사용하여 호출해주면 됩니다.

 
반응형

'개발노트 > iOS' 카테고리의 다른 글

iOS & Android : 프로젝트에 폰트 추가 및 설정  (0) 2023.02.20
[SWIFT] Custom Alert 사용하기  (0) 2023.02.19
[MAC] 단축키 정리  (1) 2023.02.17
[SWIFT] WebView 생성하기  (0) 2023.02.17
swift : masksToBounds 란?  (0) 2022.10.04

댓글