ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WKWebView 정의 및 로드
    App/Swift 2017. 2. 20. 10:41



    iOS8부터 제공되는 WKWebView는 Safari와 비슷한 퍼포먼스로 구성된 WebView입니다.


    형태는 기존 UIWebView랑 비슷하지만, 기능적으로 추가된 부분이 많습니다.

    우선 Android처럼 Javascript와의 직접연동이 가능해졌습니다. 

    이 부분은 IOS에선 꼭 필요한 기능이었는데, Hybrid형태의 App을 개발하는 사람들에겐 희소식이 아닐 수 없습니다.

    그 외에도 속도와 memory 활용도 더 좋아졌습니다.

    차이점이라면 파라미터의 값 전달방식이 다릅니다.

    쿠키형태로 값을 전달하기 위해 &기호 대신 ;으로 값을 전달합니다.


    선언부 - WebKit 라이브러리를 Import시킨 후 NavigationDelegate와 WKUIDelegate를 extends

    1
    2
    3
    import WebKit
     
    class viewController: UIViewController, WKNavigationDelegate, WKUIDelegate{
    cs


    init - WKWebview는 SB에서 지원되지 않으므로 인라인코딩으로 선언해줘야 함

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     func 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 = self
            mainWeb.navigationDelegate = self
            self.view.addSubview(mainWeb)
        }
    cs



    페이지 Load - 페이지상에 값을 넘길 경우 POST방식으로 전달함, 비동기 방식으로 load

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     func 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 in
                if let httpResponse = response as? HTTPURLResponse {
                    if httpResponse.statusCode == 200 { // Network연결이 성공일 경우
                        /**
                         *  캐쉬메모리를 초기화 후 로드함
                         */
                        URLCache.shared.removeAllCachedResponses()
                        URLCache.shared.diskCapacity = 0
                        URLCache.shared.memoryCapacity = 0
                        self.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
Designed by Tistory.