iOS

Helloworld

Posted by hpc on 2020-11-29

Swift 和 JS 交互(一)

内容是一些iOS的代码

导入头文件

1
import WebKit

WKWebView的WKScripMessageHandler

WKWebView是Apple在iOS8推出的Webkit框架中的负责网页的渲染与展示的类,相比UIWebView速度更快,占用内存更少,支持更多的HTML特性。WKScriptMessageHandler是WebKit提供的一种在WKWebView上进行JS消息控制的协议

JS调用iOS

1
2
3
4
5
6
7
class myClass:WKScriptMessageHandler{
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if (message.name == "约定好的方法名"){
//要实现的部分
}
}
}

前端和iOS约定好方法,用作JS在调用iOS时的方法
iOS使用WKUserContentController的-add(self,name:)来监听name为“约定好的方法名”的消息
JS通过postMessage()来发送消息

定义部分

1
2
3
4
5
6
7
8
9
10
11
12
13
lazy var webView:WKWebView = {
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let config = WKWebViewConfiguration()
config.preferences = preferences
config.userContentController = WKUserContentController()
config.userContentController.add(self, name: "约定好的方法名")//这里是约定好的方法名
let webView = WKWebView(frame:CGRect(x: 0, y: safeAreaTopHeight, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-safeAreaTopHeight),configuration: config)
webView.scrollView.bounces = false
webView.scrollView.alwaysBounceVertical = true
webView.navigationDelegate = self
return webView
}()

项目中引入Html5文件

1
2
3
4
5
6
func setUI(){
let path = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "dist")
let url = URL.init(fileURLWithPath: path!)
let request = URLRequest(url: url)
webView.load(request)
}

iOS调用JS:

通过WKWebView的

1
webView.evaluateJavaScript(<#T##javaScriptString: String##String#>, completionHandler: )