Swift3의 네이티브 앱과 자바 스크립트 통신

8447 단어 swift3

Javascript 작성



적당히 서버에 배치

communication.html
<html>
<head>
<tite></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
//こちらの関数はSwiftから呼ばれる
function fromSwift() {
    $('p').text('Swiftから呼ばれてるよ!!!!');
}

(function() {
    $(window).load(function() {
       //window.location.hashは、URLの「#」記号の後の部分を取得、もしくは、設定するプロパティ。これでSwiftからのデータ取得
       var swiftData = window.location.hash;
       $('p').text('Swiftからもらった:' + swiftData);

       $('.btn').on('click', function() {
            //以下のURLをSwiftから取得
            window.location = "fromJavascript://hello";
       });
    });
})(jQuery)
</script>
<body>
<h1>Swift3のネイティブアプリとJavascritpの通信</h1>
<p></p>
<div class="container">
<button class="btn">Swiftにイベント送信</button>
</div>
</body>
</html>

Swift ViewController



Swift 소스

ViewController.swift
import UIKit
class ViewController: UIViewController , UIWebViewDelegate{

    @IBOutlet weak var web: UIWebView!


    override func viewDidLoad() {
        super.viewDidLoad()
        //LocalサーバーURL
        let url = URL(string: "http://192.168.11.11")
        //#を追加した文字列はwindow.location.hashから取得できる
        let insertUrl = URL(string: "#HelloJavascrpt", relativeTo: url)
        let urlRequest = URLRequest(url: insertUrl!)
        web.delegate = self
        web.loadRequest(urlRequest)
    }

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        if let scheme = request.url?.scheme {
            if scheme == "fromjavascript" {

                //Javascriptのメッソドを呼び出す
                web.stringByEvaluatingJavaScript(from: "fromSwift()")
                return false

            }
        }
        return true
    }

}

실행 결과



HelloJavascript 문자열은 Swift에서 보낸 문자열입니다.





Swift로 이벤트 보내기 클릭 후 Swift에서 javascript 메소드 호출



좋은 웹페이지 즐겨찾기