Swift与JS交互

来源:互联网 发布:等离子数控切割机编程 编辑:程序博客网 时间:2024/06/01 09:32

swift与js交互:
先看model:


@objc protocol VideoDelegate : JSExport {    func callSystemCamera();    func exitsCollection(cid: String);}@objc class OCModel: NSObject , VideoDelegate {        var jsContext: JSContext!            func callSystemCamera() {                print("callSystemCamera exe")                let jsFunc = jsContext.objectForKeyedSubscript("jsFunc");        jsFunc?.call(withArguments: []);            }        func exitsCollection(cid: String) {        print("cid \(cid)");                let handleFunc = jsContext.objectForKeyedSubscript(cid);        handleFunc?.call(withArguments: ["type","1"]);            }        }class TestJSContext: NSObject {            func testJS(){        let jsContext = JSContext();        jsContext?.exceptionHandler = {            (context,value) -> Void in                        print("context?.exception.toString() \(String(describing: context?.exception?.toString()))");        }                let jsPath = Bundle.main.url(forResource: "js", withExtension: "js");        let jsTxt = try? String.init(contentsOf: jsPath!);        //    let value = jsContext?.evaluateScript("2 * 0");        //    print("value?.toObject() \(value?.toString())");        let csDt = jsContext?.evaluateScript(jsTxt!);        print(csDt as Any);        let arrayVa = jsContext?.objectForKeyedSubscript("array");        print("arrayVa?.toArray() \(arrayVa?.toObject() ?? "")");                var funcMethod = jsContext?.evaluateScript("enterHome")        let result = funcMethod?.call(withArguments: [9])        print("object = \(result)")    }}


注意: 必须实现 JSExport协议,

viewController:

首先加载 html 到 webView

然后 在加载完成之后 直接加入 model

有点需要注意:

是 value(forKeyPath:)不是 value(forKey:);


从webView 里获取 JSContext

  1.     self.jsContext = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext  




原创粉丝点击