最近项目需求,需要用到JavaScriptCore和@H_404_2@WebKit,但是网上的资源有限,而且比较杂,都是一个博客复制另外一个博客,都没有去实际敲代码验证,下面给大家分享一下我的学习过程。@H_404_2@
controller的代码:@H_404_2@@H_404_2@
- import UIKit
- import WebKit
- class JSCallSwiftController: UIViewController {
- var webView = WKWebView()
- override func viewDidLoad() {
- super.viewDidLoad()
- setWebView()
- }
- func setWebView() {
- webView.frame = view.frame
- let config = WKWebViewConfiguration()
- //偏好设置
- config.preferences = WKPreferences()
- //字体
- config.preferences.minimumFontSize = 10
- //设置js跳转
- config.preferences.javaScriptEnabled = true
- //不自动打开窗口
- config.preferences.javaScriptCanOpenWindowsAutomatically = false
- //web内容处理池
- config.processPool = WKProcessPool()
- //js和webview内容交互
- config.userContentController = WKUserContentController()
- //注入js对象名称为appmodel,当js通过appmodel来调用
- //可以在wkscriptMessagehandler的代理中接收到
- config.userContentController.add(self,name: "AppModel")
- //webView
- webView = WKWebView(frame: view.bounds,configuration: config)
- view.addSubview(webView)
- let url = Bundle.main.url(forResource: "JSCallOC",withExtension: "html")
- webView.load(URLRequest(url:url!))
- }
- }
- extension JSCallSwiftController: WKNavigationDelegate {
- }
- extension JSCallSwiftController: WKScriptMessageHandler {
- func userContentController(_ userContentController: WKUserContentController,didReceive message: WKScriptMessage) {
- print(message.body)
- }
- }
html里面要写入的代码:
这样就很简单的实现了js调用swift的方法;
- function log(n) {
- window.webkit.messageHandlers.AppModel.postMessage({body:n})
- }
如果转载请注明转于:@H_404_2@AirZilong的博客