Native → Javascript 호출

[방법 1] 미리 등록한 시점에 자바스크립트 실행

let javascriptSourceCode = "MyFunction" // 실행할 자바스크립트

let userScript = WKUserScript(
	source: javascriptSourceCode,
    injectionTime: .atDocumentStart, // 스크립트를 웹페이지에 삽입하는 시간을 결정
//    injectionTime: .atDocumentEnd,  
    forMainFrameOnly: true
)

let userContentController = WKUserContentController()
userContentController.addUserScript(userScript)

[방법 2] 필요한 시점에 자바스크립트 실행

let javascriptSourceCode = "MyFunction" // 실행할 자바스크립트

webView.evaluateJavaScript(javascriptSourceCode) { result, error in
    if let error = error {
        print(error.localizedDescription)
    } else if let result = result {
        print(result)
    }
}

Javascript → Native 수신

  • Javascript
  • window.webkit.messageHandlers.<name>.postMessage(<messageBody>) // ex) window.webkit.messageHandlers.MyFunction.postMessage()

1. Message Handler 등록

class ViewController: UIViewController {

    let messageHandlerName: String = "MyFunction"

    func configureWebView() {
        let userContentController = WKUserContentController()
        userContentController.add(self, name: messageHandlerName)
        
        let configuration = WKWebViewConfiguration()
        configuration.userContentController = userContentController
        webView = WKWebView(frame: frame, configuration: configuration)
    }

}

2. Message Hanlder 처리

extension ViewController: WKScriptMessageHandler {

    func userContentController(
        _ userContentController: WKUserContentController,
        didReceive message: WKScriptMessage
    ) {
        if message.name == messageHandlerName {
            // 처리할 내용
            print(message.body)
        }
    }
}

 

'' 카테고리의 다른 글

Navigation bar 색상변경  (0) 2023.09.20
Handling Different Data Types in Core Data  (0) 2023.09.04
딥링크 (URL Scheme, Universal Link)  (0) 2022.11.21
Status bar 색상 변경  (0) 2022.11.18
면접질문  (0) 2022.11.08

+ Recent posts