-
ios 웹뷰와 통신 (Native <-> JavaScript 통신)Swift 2021. 7. 21. 18:24
WKWebView
https://developer.apple.com/documentation/webkit/wkwebview
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'Swift' 카테고리의 다른 글
Builder - dynamicMemberLookup (+ KeyPath) (0) 2021.09.30 dynamicMemberLookup (+ KeyPath) (0) 2021.09.23 Combine (0) 2021.07.20 Swift Swizzling (0) 2021.07.16 Swift Async / Await (0) 2021.07.09