swift之与h5之间的交互(二)
很多小伙伴表示有场景需要给h5端进行交互方法相互调用传值,今天就给大家简单的介绍下:
首先咋们iOS端先搭建好自己的环境,不废话上代码
一.h5调用iOS端
1.先搭建wkwebview,布局的代码省略,遵守协议WKScriptMessageHandler
let webView: WKWebView = {
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let config = WKWebViewConfiguration()
let controller = WKUserContentController()
config.userContentController = controller
config.preferences = preferences
let webView = WKWebView(frame: .zero, configuration: config)
webView.scrollView.showsVerticalScrollIndicator = false
webView.scrollView.showsHorizontalScrollIndicator = false
webView.scrollView.bounces = false
webView.navigationDelegate = self
if #available(iOS 11.0, *) {
webView.scrollView.contentInsetAdjustmentBehavior = .never
}
return webView
}()
2.提前与h5商定好字段,然后设置监听,这里以"toBackApp"为例,分别放在viewWillAppear和viewWillDisappear方法里
//返回 webView.configuration.userContentController.add(self, name: "toBackApp")
webView.configuration.userContentController.removeScriptMessageHandler(forName: "toBackApp")
3.监听方法调用及解析
//MARK: 接收方法
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
switch message.name {
case "toBackApp":
if webView.canGoBack {
webView.goBack()
} else {
self.navigationController?.popViewController()
}
default:
break
}
}
//如果是h5传参过来则用message.body去接收,然后再去解析
二.iOS端调用h5
//MARK: js调用方法,如果涉及传参则在refreshH5('传参数据')
@objc func didBecomeActiveNotificationClick() {
let inputJS = "JavaCallJs.refreshH5(\"\")"
webView.evaluateJavaScript(inputJS) { (response, error) in
print(inputJS + " \(response.debugDescription) ")
}
}
//注意error是否为nil,不为nil则调用失败,需要与前端联调

浙公网安备 33010602011771号