Swift iOS WKWebView : Swift -> JavaScript 함수 호출하기 (코드 부분)
iOS WKWebView를 이용하여 swift 에서 javaScript 함수를 호출해 봅시다.
해당 글에서 코드 부분은 파란색으로 표기 됩니다.
해당 글에서 중요 부분은 붉은색으로 표기 됩니다.
1. "Swift iOS WKWebView : 기본 연동 (코드 부분)" 코드를 작성 한 후 붉은 부분을 추가 합니다.
[MainViewController.swift 파일 안]
// * WKWebView를 사용하기 위해서는 WebKit 모듈을 import 시켜야 합니다.
import WebKit
class MainViewController: UIViewController {
// * WKWebView 객체 선언
private var wkWebView: WKWebView? = nil
override func viewDidLoad() {
super.viewDidLoad()
// * WKWebView 구성
// - 여기서는 self.view 화면 전체를 WKWebView로 구성하였습니다.
self.wkWebView = WKWebView.init(frame: CGRect.init(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
// * WKWebView 화면 비율 맞춤 설정
self.wkWebView?.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))
// * WKWebView 여백 및 배경 부분 색 투명하게 변경
self.wkWebView?.backgroundColor = UIColor.clear
self.wkWebView?.isOpaque = false
self.wkWebView?.loadHTMLString("<body style=\"background-color: transparent\">", baseURL: nil)
// * WKWebView에 로딩할 URL 전달
// - 캐시 기본 정책 사용, 타임아웃은 10초로 지정하였습니다.
let request: URLRequest = URLRequest.init(url: NSURL.init(string: "<URL 입력>")! as URL, cachePolicy: URLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: 10)
self.wkWebView?.load(request)
// * WKWebView 화면에 표시
self.view?.addSubview(self.wkWebView!)
// * JavaScript 함수 호출 부분 : 인자가 없을 경우
// - 호출 함수 이름 : javaScriptFunc 일때
self.wkWebView?.evaluateJavaScript("javaScriptFunc();", completionHandler: { result, error in
// * error 값이 존재 할 경우 error message 표시
if let anError = error {
print("* evaluateJavaScript infoUpdate Error \(anError.localizedDescription)")
}
print("* evaluateJavaScript infoUpdate Result \(result ?? "")")
})
// * JavaScript 함수 호출 부분 : 인자가 있는 경우
// - 호출 함수 이름 : javaScriptFunc 일때
// - 참고 : swift에서 String 문장 사이 변수를 넣고자 할때 \(<변수명>) 이렇게 사용한다.
let A = "인자1"
let B = "인자2"
self.wkWebView?.evaluateJavaScript("javaScriptFunc('\(A)', '\(B)');", completionHandler: { result, error in
if let anError = error {
print("* evaluateJavaScript infoUpdate Error \(anError.localizedDescription)")
}
print("* evaluateJavaScript infoUpdate Result \(result ?? "")")
})
}
}