Programming/Mac & iOS

[iOS] WKWebView (instead of UIWebView)

MB Kyle KWON 2017. 1. 19. 15:16

    기존 UIWebView는 무겁고 복잡하고 메모리 누수가 있다. 심지어 니트로 자바스크립트 엔진을 장착한 모바일 사파리에 비해 느리다. WWDC 2014에서 새로 소개된 WKWebView는 AppKit의 WebView와 UIKit의 UIWebView를 대체하고, 양 플랫폼의 동일한 API를 제공하는 새로운 Webview이다. 60fps 스크롤링, 빌트인-제스처, App-WebPage 간 커뮤니케이션을 제공한다. 




   UIWebView와 WKWebView의 큰 차이점은 2가지가 있다. 먼저 UIWebView는 UIKit에 구현되어 있어, 따로 import가 필요하지 않다. 그래서 Interface builder에서 사용할 수 있다. 그 다음, WKWebView는 javascript 최적화를 위해 별도의 프로세스를 운용한다. 그래서 UIWebView보다 빠르고 효율적이다. 단, iOS 8에서 local file을 로드하는데, 오류를 가지고 있다. iOS 9에서 수정된 사항이다.



그외 자세한 차이점은 아래의 URL에서 확인 가능하다.





WKWebKit framework


WKBackForwardList - 웹뷰에서 방문했던 웹 페이지 리스트

WKBackFowardListItem - 웹뷰 back-forward 리스트에 각 웹 페이지


WKFrameInfo - 웹 페이지에서 frame에 관한 정보를 포함


WKNavigation - 웹 페이지 로딩 과정을 추적하는 정보를 포함

WKNavigationAction - 웹 페이지 navigation을 유발하는 Action에 관한 정보를 포함

WKNavigationRespoonse - navigation 응답 값을 포함


WKPreferences - 웹뷰의 설정값을 캡슐화


WKProcessPool - 웹 컨텐츠 프로세스들의 pool


WKUserController - 자바스크립트로 메시지를 보내거나 웹뷰에 user script를 삽입

WKScriptMessage - 웹 페이지로 보낼 메시지의 정보를 포함

WKUserScript - 웹 페이지에 삽입할 스크립트


WKWebViewConfiguration - 웹 뷰를 초기화할 property 들의 collection


WKWindowFeatures - 새로운 웹 뷰를 요청할 때, 윈도우에 포함할 값들




Protocols


WKNavigationDelegate - main/sub frame load 정책과 main frame navigation 과정을 추적하는 메소드를 제공


WKScriptMessageHandler - 웹페이지에 동작하는 자바스크립트 메시지를 받는 메소드 제공


WKUIDelegate - 웹 페이지 상에서 native UI를 표현하는 메소드를 제공





Javascript - Native communication


Message Handlers


    Web과 앱간 통신은 message handler를 통하여 한다. Javascript에서 Native로 message를 던지기 위해서 아래와 같이 구현한다. 아래의 {NAME}에 따라 Native에서 message를 처리할 handler를 지정할 수 있다. 




    Native에서 message를 처리하기 위해선 WKScriptMessageHandler protocol을 구현한 다음 addScriptMessageHandler()를 통하여 message handler를 추가하면 된다. 추가하는 코드는 아래와 같다. NotificationScriptHandler는 WKScriptMessageHandler를 통하여 구현됬다. 구현된 객체를 addScriptMessageHandler()를 통하여 name과 함께 추가하면 된다. 추가할 때, 사용한 name을 기준으로 Javascript에서 message를 처리할 handler를 지정해 줄 수 있다.






Injecting Behavior with User Script


    WKWebView에서 지원하는 기능 중에 강력한 기능 중 하나는 사용자가 script를 Native에서 작성하여 WebView에서 실행시키는 것이다. Script를 string으로 정의한 후에 WKUserScript 객체를 생성한다. 실행되는 시점은 the start/end of document load 중에 선택하여 지정해 줄 수 있다. 아래의 코드처럼 사용하면 된다.


'Programming > Mac & iOS' 카테고리의 다른 글

[iOS] ipa와 번들에 대하여  (0) 2017.02.04
[iOS] Library & Framework in iOS  (1) 2017.01.31
[iOS] APNS JWT (JSON Web Token)  (0) 2016.12.19
[iOS] What's new in iOS 10  (0) 2016.06.27
[iOS] Alcatraz : Xcode 패키지 매니저  (0) 2016.05.25