Swift
ios 웹뷰와 통신 (Native <-> JavaScript 통신)
kkimin
2021. 7. 21. 18:24
WKWebView
https://developer.apple.com/documentation/webkit/wkwebview
Apple Developer Documentation
developer.apple.com
WKWebView before IOS 11.0 (NSCoding support was broken in previous versions)
이 오류는
stackoverflow에서 찾아보니 iOS 11 이전 버전인 경우 storyboard에서 WebKit View를 사용못하는거 같습니다.
아래처럼 코드로 작성해주면 된다.
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
계속 흰 화면으로 안뜨는데 어이없게도,,, simulator에서만 그렇다는 사실을 알게되었다...그런데 아무리 서칭을 해도 이유를 모르겠다.
아래 방법으로 했는데,,, 실물기기에서만 화면이 출력되었다.
override func viewDidLoad() {
super.viewDidLoad()
webView.load("https://www.apple.com")
}
extension WKWebView {
func load(_ urlString: String) {
if let url = URL(string: urlString) {
let request = URLRequest(url: url)
load(request)
}
}
}
따라서, 다른 방법을 도입해보기로 했다. (우선 통신이 필요한 상황이었으니, 프로젝트내의 html파일을 작성)
WKScriptMessageHandler 사용.
WKUserContentController
https://developer.apple.com/documentation/webkit/wkusercontentcontroller
웹뷰
let contentController = WKUserContentController()
webView.configuration.userContentController = contentController
webView.configuration.userContentController.add(self, name: "name string")
WKScriptMessageHandler
위 프로토콜을 채택하여 didReceive 함수로 이벤트를 받아옵니다.
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "name string" {
print(message.body as? String)
}
}
세션 유지 관련된 내용도 필요하다.
728x90