Swift与Js通过WebView交互

Swift与Js通过WebView交互,第1张

概述开发环境:Swfit 2.3 XCode 8.2 基础概念 JSContext, JSContext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码 JSValue, JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等 JSExport, JSExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在JS中暴露出

开发环境:Swfit 2.3 XCode 8.2

基础概念 jscontext,jscontext是代表Js的执行环境,通过-evaluateScript:方法就可以执行一Js代码 JsValue,JsValue封装了Js与ObjC中的对应的类型,以及调用Js的API等 JsExport,JsExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在Js中暴露出来,才能调用 Swift代码
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交互所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存