-
WKWebView 정의 및 로드App/Swift 2017. 2. 20. 10:41
iOS8부터 제공되는 WKWebView는 Safari와 비슷한 퍼포먼스로 구성된 WebView입니다.
형태는 기존 UIWebView랑 비슷하지만, 기능적으로 추가된 부분이 많습니다.
우선 Android처럼 Javascript와의 직접연동이 가능해졌습니다.
이 부분은 IOS에선 꼭 필요한 기능이었는데, Hybrid형태의 App을 개발하는 사람들에겐 희소식이 아닐 수 없습니다.
그 외에도 속도와 memory 활용도 더 좋아졌습니다.
차이점이라면 파라미터의 값 전달방식이 다릅니다.
쿠키형태로 값을 전달하기 위해 &기호 대신 ;으로 값을 전달합니다.
선언부 - WebKit 라이브러리를 Import시킨 후 NavigationDelegate와 WKUIDelegate를 extends
123import WebKitclass viewController: UIViewController, WKNavigationDelegate, WKUIDelegate{cs init - WKWebview는 SB에서 지원되지 않으므로 인라인코딩으로 선언해줘야 함
12345678910111213141516171819func initView(){/*** 쿠키설정을 통해 Session값 유지*/let userContentController = WKUserContentController()if let cookies = HTTPCookieStorage.shared.cookies {let script = getJSCookiesString(cookies: cookies)let cookieScript = WKUserScript(source: script, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)userContentController.addUserScript(cookieScript)}let webViewConfig = WKWebViewConfiguration()webViewConfig.userContentController = userContentController/* 쿠키설정을 통해 Session값 유지 끝 */mainWeb = WKWebView(frame: CGRect.zero, configuration:webViewConfig)mainWeb.uiDelegate = selfmainWeb.navigationDelegate = selfself.view.addSubview(mainWeb)}cs 페이지 Load - 페이지상에 값을 넘길 경우 POST방식으로 전달함, 비동기 방식으로 load
123456789101112131415161718192021222324252627282930313233343536373839func loadUrl(){let url = URL(string: "http://www.test.com/")!let request = NSMutableURLRequest(url: url as URL,cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData,timeoutInterval: 30.0)/*** Parameter형식은 &가 아닌 ;으로 나눈다(쿠키형태로 값을 전달하기 위해)*/request.httpMethod = "POST"let bodyData: String = "appChk=ios;ver=2"request.addValue(bodyData, forHTTPHeaderField: "Cookie")/*** 비동기 방식으로 WKWebView를 load함*/let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error inif let httpResponse = response as? HTTPURLResponse {if httpResponse.statusCode == 200 { // Network연결이 성공일 경우/*** 캐쉬메모리를 초기화 후 로드함*/URLCache.shared.removeAllCachedResponses()URLCache.shared.diskCapacity = 0URLCache.shared.memoryCapacity = 0self.mainWeb.load(request as URLRequest)}else{// 에러페이지 호출self.goErrorPage()}}else{// 에러페이지 호출self.goErrorPage()}}task.resume()}}cs 'App > Swift' 카테고리의 다른 글
IOS Architecture (0) 2017.07.06 WKWebView의 Delegate (0) 2017.02.20 서브스크립트와 오버라이딩 (0) 2017.02.07 클래스와 구조체 (0) 2017.02.06 열거형 (0) 2017.02.06