不多说,直接上代码:
import UIKit import WebKit class SwiftCallJSController: UIViewController { var context = JSContext() var webView = WKWebView() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white //webView 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!)) //swift操作js的按钮 let button = UIButton.init() button.frame = CGRect(x:100,y:100,width:100,height:100) button.backgroundColor = .red button.addTarget(self,action: #selector(doButton),for: .touchDown) view.addSubview(button) } func doButton() { webView.evaluateJavaScript("log(10)") { (str,error) in if error != nil { print("\(error)") } else { print(str ?? "") } } } func loadJsFile(name: String) -> String { let path = Bundle.main.path(forResource: name,ofType: "js") let jsScript = try! String(contentsOfFile: path!,encoding: String.Encoding.utf8) return jsScript } } extension SwiftCallJSController: WKScriptMessageHandler { func userContentController(_ userContentController: WKUserContentController,didReceive message: WKScriptMessage) { print(message.body) } }
在html里面要添加的的代码,显示swift传过去的参数:
function log(n) { document.getElementById("result").innerText = n; }
这样就实现了swift给js传参数和调用!
如果转载请注明转于:AirZilong的博客