这几天一直在研究js和swift的交互,发现里面还是有一些东西可以记载下来,或者帮助后来人,闲话少说,下面开始:
总起来说就2种不同的交互方式:
1.swift调用js
2.js调用swift代码
这篇文章主要说swift调用js
1.利用js修改html页面,这也可以算作一种swift调用js
let header = "document.getElementById('header').remove()"
webView.stringByEvaluatingJavaScript(from: header)
还可以利用下面的代码来改变页面的标题
self.title = webView.stringByEvaluatingJavaScript(from: "document.title")
2.还有一种调用js里的方法
JavaScriptCore是苹果在iOS7时新推出用以实现JS和iOS代码交互的框架
JSContext是JS的执行环境。
JSValue是Swift或者OC与JS交互的中间媒体,可以转化为Swift对 象或者OC对象,也可以获取JS对象或方法。
JSExport是Swift或者OC与JS交互的协议,构造一个类,遵循JSExport协议,实现协议的方法和初始化协议的属性,然后把Swift或OC对象与JS对象关联,我们就可以在JS环境下使用关联的对象调用之前实现的协议的方法或取得属性值或修改属性值。
JSManagedValue:JSValue的内存管理器。
JSVirtualMachine:JSVirtualMachine为JavaScript的运行提供了底层资源.
//获取js的运行环境JSContext
let context = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext
//获取js里的goGroup方法JSValue(注意:这里获得方法只能是js里公有的方法,私有方法获取不到,因为不懂js搞了半天就是不明白为何调用不成功,后来换了一个方法就可以了,才明白原来只有共有的方法才能调用)
let jsFunc = context?.objectForKeyedSubscript("goGroup")
//执行js里的方法,"10432"是里面的传递的参数
jsFunc?.call(withArguments: ["10432"])
接下来我会在写一篇文章交互二,写的是js调用swift,文章地址:关于js和swift交互的理解(二)