基础概念 jscontext,jscontext是代表Js的执行环境,通过-evaluateScript:方法就可以执行一Js代码 JsValue,JsValue封装了Js与ObjC中的对应的类型,以及调用Js的API等 JsExport,JsExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在Js中暴露出来,才能调用 Swift代码开发环境:Swfit 2.3 XCode 8.2
import UIKitimport JavaScriptCore// 这里必须使用@objc,因为JavaScriptCore库是ObjectiveC版本的。如果不加@objc,则调用无效果@objc protocol VIDeoJsDelegate:JsExport { func playLog(vIDeoID:String) func existsCollectVIDeo(collectID:String,_ handlename:String,_ typestr:String)}@objc class VIDeoJsModel: NSObject,VIDeoJsDelegate { var jscontext:jscontext! func playLog(vIDeoID:String) { print(vIDeoID) } func existsCollectVIDeo(collectID:String,_ typestr:String) { // 回调Js里定义的函数 let handleFunc = self.jscontext.objectForKeyedSubscript(handlename) let dict = ["type": typestr,"status": false] handleFunc?.callWithArguments([dict]) }}class YoukuVIEwController: UIVIEwController,uiwebviewdelegate { var jscontext:jscontext! @IBOutlet weak var web: UIWebVIEw! overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() let url = "http://weixin.leijiaocn.com" let nsUrl = NSURL(string: url) self.web.loadRequest(NSURLRequest(URL: nsUrl!)) self.web.delegate = self } overrIDe func dIDReceiveMemoryWarning() { super.dIDReceiveMemoryWarning() } // MARK: 绑定Js交互事件 func webVIEwDIDFinishLoad(webVIEw: UIWebVIEw) { self.jscontext = webVIEw.valueForKeyPath("documentVIEw.webVIEw.mainFrame.JavaScriptContext") as! jscontext let model = VIDeoJsModel() model.jscontext = self.jscontext // 将jiajiao100app注入到Js中,在Js让jiajiao100app以对象的形式存在 self.jscontext.setobject(model,forKeyedSubscript: "jiajiao100app") let curUrl = webVIEw.request?.URL?.absoluteString //WebVIEw当前访问页面的链接 可动态注册 self.jscontext.evaluateScript(try? String(contentsOfURL: NSURL(string: curUrl!)!,enCoding: NSUTF8StringEnCoding)) self.jscontext.exceptionHandler = { (context,exception) in print("exception:",exception) } }}HTML代码
var existsCollectVIDeo = function() { if(window.jiajiao100app) { window.jiajiao100app.existsCollectVIDeo(albumID,"VIDeoCollectionHandle","existsCollectVIDeo"); }};var playLog = function(str) { if(window.jiajiao100app) { window.jiajiao100app.playLog(str); }};var VIDeoCollectionHandle = function(d) { alert(d.status);};existsCollectVIDeo();playLog("hello world");参考文章
http://blog.sina.com.cn/s/blog_a5243c7f0102wd3c.html http://blog.csdn.net/json_vip/article/details/51615029总结
以上是内存溢出为你收集整理的Swift与Js通过WebView交互全部内容,希望文章能够帮你解决Swift与Js通过WebView交互所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)