当前位置:   article > 正文

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

swift 调用js方法
1.首先创建一个代理方法继承JSExport
里面实现的方法是js需要调用swift的方法
@objc protocol JavaScriptSwiftDelegate: JSExport {
    func method(str:String) //带参数的
    func method2()//不带参数
}
  • 1
  • 2
  • 3
  • 4
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()
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
3.让swift 的webView实现UIWebViewDelegate,
yourweb.delegate = self
  • 1
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!))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/710391
推荐阅读
相关标签
  

闽ICP备14008679号