最近项目需求,需要用到JavaScriptCore和WebKit,但是网上的资源有限,而且比较杂,都是一个博客复制另外一个博客,都没有去实际敲代码验证,下面给大家分享一下我的学习过程。
js调用swift
controller的代码:
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里面要写入的代码:
function log(n) { window.webkit.messageHandlers.AppModel.postMessage({body:n}) }这样就很简单的实现了js调用swift的方法;
如果转载请注明转于:AirZilong的博客