JSFunction 0.1.1

JSFunction 0.1.1

outofcode 维护。



  • 作者
  • OutOfCode

JSFunction

CI Status Version License Platform

示例

要运行示例项目,请克隆仓库,然后从示例目录运行pod install

需求

安装

JSFunction 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行

pod 'JSFunction'

作者

OutOfCode, [email protected] Bear, [email protected]

许可协议

JSFunction可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。

使用

创建一个继承JSFunction的类。

@objcMembers
final class TestScript : NSObject, JSFunction {
    
    var name: String = "test"
    
    init(name: String) {
        self.name = name
    }
    
    func message1() {
        print("\(type(of: self)).\(#function)")
    }
    
    func message2(_ text: String) {
        print("\(type(of: self)).\(#function) text = \(text)")
    }
    
    func message3(_ text1: String, _ text2: String) {
        print("\(type(of: self)).\(#function) text1=\(text1) text2=\(text2)")
    }
    
    func json(_ json: String) {
        guard let model = json.decode(type: JsonModel.self) else { return }
        print("\(type(of: self)).\(#function) name=\(model.name), age=\(model.age)")
    }
    
    struct JsonModel : Decodable {
        var name: String
        var age: Int
    }
}

添加WKUserContentController函数

class ViewController: UIViewController {
    
    private var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let script = TestScript(name: "test")
        
        let userContentController = WKUserContentController()
        userContentController.add(function: script)
        
        let configuration = WKWebViewConfiguration()
        configuration.userContentController = userContentController
        
        webView = WKWebView(frame: view.frame, configuration: configuration)
        view.addSubview(webView)
        
        let localFile = Bundle.main.path(forResource: "test", ofType: "html") ?? ""
        let url = URL(fileURLWithPath: localFile)
        let request = URLRequest(url: url)
        webView.load(request)
    }
}

JavaScript方面

<script type="text/javascript">
    function message1() {
        var message = 'message1()';
        window.webkit.messageHandlers.test.postMessage(message);
    }

    function message2() {
        var message = 'message2(My Name is DH)';
        window.webkit.messageHandlers.test.postMessage(message);
    }

    function message3() {
        var message = 'message3(My Name is DH, 29 years old)';
        window.webkit.messageHandlers.test.postMessage(message);
    }

    function json() {
        var json = '{"name": "DH", "age": 29}';
        var message = 'json(' + json + ')';
        window.webkit.messageHandlers.test.postMessage(message);
    }
</script>