swift 与JS交互( JS调用swift方法)

来源:互联网 发布:爱腾网络延长器接法图 编辑:程序博客网 时间:2024/06/11 06:54

1.首先创建一个代理方法继承JSExport

里面实现的方法是js需要调用swift的方法

@objc protocol JavaScriptSwiftDelegate: JSExport {    func method(str:String) //带参数的    func method2()//不带参数}

2.创建一个model继承NSObject 并遵守上面的协议 实现协议要求的方法

在model里面声明两个block便于参数的传出

@objc class SwiftJavaScriptModel: NSObject, JavaScriptSwiftDelegate {    weak var jsContext: JSContext?    typealias customeBlock = (str: String )->Void    typealias customeBlock2 = ()->Void    var block:customeBlock?    var block2:customeBlock2?    func method(str: String) {      block(str:str)    }    func method2(){       block2()    }}

3.让swift 的webView实现UIWebViewDelegate,

yourweb.delegate = self

4.实现webVeiw的代理方法 在webViewDidFinishLoad的代理方法里进行交互

let context=webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext let model = SwiftJavaScriptModel() model.controller = self model.jsContext = context model.block = {    //实现对应的操作 调用swift的方法} self.jsContext = context //下面的方法是把model 注入js里面  native是js里面方法的前缀 比如js里面的方法是 //native.method() self.jsContext?.setObject(model, forKeyedSubscript: "native") let url = NSBundle.mainBundle().URLForResource("html路径", withExtension: "html") self.jsContext.evaluateScript(try?String.init(contentsOfURL: url!))
原创粉丝点击