ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ios 웹뷰와 통신 (Native <-> JavaScript 통신)
    Swift 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

    '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

    댓글

Designed by Tistory.