DevgWebView – 더욱 편한 웹뷰 (WKWebView 기반)

DevgWebView는 WKWebView를 기반으로 웹뷰 사용을 더욱 편하게 만들어 주는 모듈입니다.

 

지원 기능들

  • 웹뷰 간의 쿠키가 공유됩니다.
  • 다음 앱 실행 시에도 쿠키가 유지됩니다.
  • 웹뷰의 캐시 기능을 켜거나 끌 수 있습니다.
  • 웹의 전체 로드 진행 상황을 알 수 있습니다.
  • 웹브라우저와 동일한 기준의 로드 시작, 완료를 알 수 있습니다.
  • UserAgent 기본값을 가져오거나 변경할 수 있습니다.
  • Javascript로 UI 명령을 내리기 수월하도록 DOM이 준비된 상태를 알려 드립니다.
  • Javascript의 alert(), confirm(), prompt() 명령을 바로 이용할 수 있습니다.
  • Canvas Fingerprinting을 제공합니다.
  • 위 모든 기능을 자동으로 또는 간편하게 이용할 수 있습니다.

 

필요 조건

  • iOS 10 이상
  • Swift 4 이상
  • StoryBoard

 

다운로드(git)

DevgWebView는 git을 통해 배포하고 있습니다. Devg 패키지를 사용할 프로젝트에 다운로드 합니다. 

git clone https://gitlab.com/kwanp/Devg Devg
cd Devg
git submodule init
git submodule update

 

설치

1. Devg.xcodeproj를 프로젝트의 타겟에 추가해 줍니다.

2. Embedded Binaries에 3개의 Devg 모듈을 추가해 줍니다.

3. Story Board에서 웹뷰로 사용할 UIView를 DevgWebView로 class를 변경해 줍니다.

4. Devg 모듈들을 import 합니다.

import Devg
import DevgOnce
import DevgWebView

5. Story Board의 DevgWebView와 UIViewController를 연결 후 웹뷰의 작동을 확인합니다.

@IBOutlet weak var webView: DevgWebView!
self.webView.load(url: "https://zenr.me")

 

속성들

var url: String?

웹뷰에 로드된 웹의 URL입니다.

var title: String?

웹뷰에 로드된 웹의 제목입니다. html문서의 <title> 태그로 지정된 값을 가져 옵니다.

var isCache: Bool = true

false로 지정하여 WKWebView 자체의 캐시 기능을 끌 수 있습니다.

var fingerPrint: String?

Canvas Fingerprinting 정보입니다. Canvas Fingerprinting를 발생시키는 명령을 사용하기 전에는 값이 비어 있습니다.

var userAgent: String?

UserAgent 정보를 가져오거나 변경할 수 있습니다.

var canBack: Bool

웹뷰의 ‘뒤로 가기’ 가능 여부입니다.

var canForward: Bool

웹뷰의 ‘앞으로 가기’ 가능 여부입니다.

  

기능들

load(url: String, headers: [String: String]? = nil)

http 또는 https로 시작하는 웹 페이지를 주소 문자열로 해당 웹 페이지를 웹뷰에 로드합니다. 필요에 따라 HTTP 헤더를 로드 시 추가할 수 있습니다.

removeCache()

로드 전 웹뷰 자체 캐시를 비웁니다.

javascript(_ script: String, completion: ((_ result: String?, _ error: Error?) -> Void)?) 

Javascript를 웹뷰에 실행하고 completion 핸들러로 그 결과를 문자열로 받을 수 있습니다. 

back()

뒤로 가기

forward()

앞으로 가기

reload()

새로 고침

fingerPrint(completion: @escaping (_ result: String?) -> Void)

Canvas Fingerprinting 발생시켜 그 결과를 completion 핸들러로 받습니다.

 

Delegates

@objc public protocol DevgWebViewDelegate {
    func request(url: String?, _ webView: DevgWebView) -> Bool
    func start(_ webView: DevgWebView, url: String?)
    func end(_ webView: DevgWebView)
    func documentReady(_ webView: DevgWebView)
    func error(_ error: Error, _ webView: DevgWebView)
    func progress(_ progress: Double, _ webView: DevgWebView)
    func title(_ title: String?)
}
self.webView.delegate = self

DevgWebView의 작동 이벤트를 protocol로 받아 대응할 수 있습니다.

func request(url: String?, _ webView: DevgWebView) -> Bool

웹페이지 로드 시작 등 통신 발생 이벤트입니다. iframe 등 웹 페이지내의 통신도 인지합니다. false를 반환하여 해당 통신을 시작 전에 중단 시킬 수 있습니다.

func start(_ webView: DevgWebView, url: String?)

웹페이지 로드 시작 이벤트입니다. 순수하게 웹페이지 로드 시작 시만 인지합니다. 웹페이지 내의 통신은 인지하지 못합니다.

func end(_ webView: DevgWebView)

웹페이지 로드 완료 이벤트입니다. 순수하게 웹페이지 로드 완료 시만 인지합니다. 웹페이지 내의 통신은 인지하지 못합니다.

func documentReady(_ webView: DevgWebView)

DOM이 준비 되었을때 발생하는 이벤트입니다. 웹페이지 로드가 완료되지 않았어도 DOM이 준비된 상태를 감지할 수 있습니다.

func error(_ error: Error, _ webView: DevgWebView)

통신 시 오류 발생 이벤트입니다.

func progress(_ progress: Double, _ webView: DevgWebView)

웹페이지 로드 시작과 완료까지 진행 상태를 반환하는 이벤트입니다. 웹페이지 내에서 추가 통신 발생 시 해당 반환 값은 변할 수 있습니다. 0.0에서 1.0까지 추가적으로 진행되는 것이 아닙니다.

func title(_ title: String?)

DOM이 준비되어 HTML <title> 태그에서 타이틀을 가져 올 시 발생하는 이벤트입니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다