最近看了很多ios与js交互的问题,突然发现WKWeView花了小半天时间研究了一下与大家分享一下直接上代码
1,首先需要在ViewController加上WKScriptMessageHandler
class ViewController: UIViewController, WKScriptMessageHandler
2,定义UIWebVIew和WKWebView
@IBOutlet weak var containerView: UIWebView!
var webView : WKWebView!
3,loadView()
override func loadView() {
super.loadView()
// 获得WK控制管理器
let contentController = WKUserContentController()
// 通过控制管理器来添加js对象
// html页面可以通过window.webkit.messageHandlers.phone.proessMessage('XXXX')来调用
contentController.addScriptMessageHandler(self, name: "phone")
// 获得WKWebView配置构造器
let config = WKWebViewConfiguration()
// 设置控制器
config.userContentController = contentController
// 构造一个WKWebView
// 第一个参数是CGRECT类型,意思就是构造容器范围,self.containerView.bounds是UIWebView的大小,
// 这样WKWebView的大小就与UIWebView 大小一致
self.webView = WKWebView(frame: self.containerView.bounds, configuration: config)
// 将WKWebView添加到UIWebView容器中,这样可以保证布局的一致性,
// 因为有的时候我们可能需要预留出顶部导航栏这时我们是需要UIWebView来进行调整
self.containerView.addSubview(self.webView)
}
4,viewDidload()
override func viewDidLoad() {
super.viewDidLoad()
// 指定地址
let url = NSURL(string : "XXXX");
// 请求
let request = NSURLRequest(URL : url!);
// 加载请求
self.webView.loadRequest(request)
}
5,userContentController
/**
* 此方法为js接收参数(方法名不可变,改变WKScriptMessageHandler引入会出现错误)
*/
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
//
print(message.name);
print(message.body)
}