Swift 和 JS 交互(一)
内容是一些iOS的代码
导入头文件
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: )
|