본문 바로가기
프로그램/iOS

WKWebView 를 이용해서 로컬 HTML 파일 로딩. javascript --> native

by 로드러너 2020. 1. 6.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

스토리보드

스토리보드

 

test.html

<h2>Welcome</h2>

<input type="button" onclick="hello()" value="Call">

 

<script type="text/javascript">

    function hello(){

        try{

            webkit.messageHandlers.callbackHandler.postMessage("Hi Hello");

        }catch(err){

            alert(err);

        }

    }

</script>

 

 

전체 소스

import UIKit

import WebKit

 

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate, WKScriptMessageHandler

{

    @IBOutlet var containerView: UIView!

    var webView: WKWebView!

   

    override func loadView() {

        super.loadView()

             

        let contentController = WKUserContentController()

        let config = WKWebViewConfiguration()

        

        contentController.add(self, name: "callbackHandler")

        config.userContentController = contentController

 

        webView = WKWebView(

            frame: self.containerView.bounds,

            configuration: config

        )

        

        self.view.addSubview(webView)

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

      

        guard let localFilePath = Bundle.main.path(forResource: "test", ofType: "html")

            else {

                  print("path is nil")

                  return

                 }

        let url = URL(fileURLWithPath: localFilePath)

        let request = URLRequest(url: url)

        webView.load(request as URLRequest)

    }

    

    public func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage

        message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping() -> Void) {

    }

    

    // Web View에서 웹 컨텐츠를 받기 시작할 때 호출된다.

    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {

    }

    

    // 웹 컨텐츠가 Web View로 로드되기 시작할 때 호출된다.

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {

    }

       

    @available(iOS 8.0, *)

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

        if(message.name == "callbackHandler") {

            print("JavaScript is sending a message \(message.body)")

        }

    }

 

}

 

 

실행결과