반응형
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 |
댓글