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 |