Вызов метода класса swift напрямую из javascript - PullRequest
0 голосов
/ 13 декабря 2018

Привет, я пытаюсь реализовать связь между JavaScript и IOS.Я преуспел в создании соединения для получения обратного вызова в ios из javascript с использованием messageHandlers с помощью следующего кода

import UIKit
import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {

    private var webView : WKWebView?

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print("Message from beyond: \(message.body)")
        let jsMapper = JavaScriptInterfaceMapping()

        jsMapper.perform(Selector(("noParam")))
        jsMapper.perform(Selector(("oneParam:")), with: "firstParam")
        jsMapper.perform(Selector(("twoParams::")), with: [1, true], with: "Go Away")

        webView?.evaluateJavaScript("letSee()", completionHandler: nil)

    }

    override func loadView() {
        super.loadView()

        let  controller = WKUserContentController()
        controller.add(self, name: "xyz")

        let config = WKWebViewConfiguration()
        config.userContentController = controller

        self.webView = WKWebView(frame: self.view.frame, configuration: config)
        self.view = self.webView!

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = Bundle.main.url(forResource: "index", withExtension: "html")
        let request = URLRequest(url: url!)

        webView!.load(request)
    }

}


<!Doctype html>
<html>
  <head>
    <title>Test Web</title>
    <script>
        window.webkit.messageHandlers.xyz.postMessage("tem")
        function buttonClick1() {
            window.webkit.messageHandlers.xyz.postMessage("tem");
        }

        function myFunction() {

            return "Hi Shubham"
        }




    </script>
    <script src="script.js" ></script>
  </head>
  <body>
    <h3>If you see this then you are working very fine</h1>
    <br />
    <br />
    <br />
    <h3 class="happy">Shubham Bhiwaniwala</h3>
    <h3><a href="support.html" >Support page</a></h3>
    <button onclick="alert('Hi Shubham, how are you?')" >Say Hello</button>
    <button onclick="buttonClick1()" >Call Me</button>
  </body>
</html>


import Foundation
@objcMembers class JavaScriptInterfaceMapping: NSObject {
    func noParam() {
        print("I got called.")
    }

    func oneParam(_ a: String) {
        print("I got \(a)")
    }

    func twoParams(_ first: [Any], _ second: String) {
//        print("I got \(first), \(second)")
        print("I got first item as: \(first[0])")
        print("I got second item as: \(first[1])")
        print(second)
    }
    func threeParams(_ first: [Any], _ second: String, _ third: Bool) {
        //        print("I got \(first), \(second)")
        print("I got first item as: \(first[0])")
        print("I got second item as: \(first[1])")
        print(second)
        print(third)
    }
}

Я выяснил это решение сделать вызов метода в iOS из javascript.Но я узнал, что при соединении javascript с android мы можем получить доступ к объектам классов, присутствующих в android, внутри javascript.

Это означает, что мы можем вызывать функции напрямую из javascript и выполнять работу в android.

Так есть ли способ получить такую ​​же функциональность в разработке для iOS?

Спасибо

...