不多说,直接上代码:
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的博客