Swift WKWebView的swift调用js ---- Swift WKWebView的js调用swift
来源:互联网 发布:win7 网络电缆被拔出 编辑:程序博客网 时间:2024/06/05 15:39
Swift WKWebView的swift调用js
不多说,直接上代码:
- import UIKit
- import WebKit
- class SwiftCallJSController: UIViewController {
-
- var context = JSContext()
- var webView = WKWebView()
- override func viewDidLoad() {
- super.viewDidLoad()
- view.backgroundColor = .white
-
- webView.frame = view.frame
- let config = WKWebViewConfiguration()
-
-
- config.preferences = WKPreferences()
-
- config.preferences.minimumFontSize = 10
-
- config.preferences.javaScriptEnabled = true
-
- config.preferences.javaScriptCanOpenWindowsAutomatically = false
-
- config.processPool = WKProcessPool()
-
- config.userContentController = WKUserContentController()
-
-
- config.userContentController.add(self, name: "AppModel")
-
-
- webView = WKWebView(frame: view.bounds, configuration: config)
- view.addSubview(webView)
- let url = Bundle.main.url(forResource: "JSCallOC", withExtension: "html")
- webView.load(URLRequest(url:url!))
-
-
- 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的博客
Swift WKWebView的js调用swift
最近项目需求,需要用到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
-
- config.preferences.javaScriptEnabled = true
-
- config.preferences.javaScriptCanOpenWindowsAutomatically = false
-
- config.processPool = WKProcessPool()
-
- config.userContentController = WKUserContentController()
-
-
- config.userContentController.add(self, name: "AppModel")
-
-
- 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的博客