Swift WKWebView的swift调用js ---- Swift WKWebView的js调用swift

来源:互联网 发布:win7 网络电缆被拔出 编辑:程序博客网 时间:2024/06/05 15:39


Swift WKWebView的swift调用js

不多说,直接上代码:

[objc] view plain copy
  1. import UIKit  
  2. import WebKit  
  3. class SwiftCallJSController: UIViewController {  
  4.   
  5.     var context = JSContext()  
  6.     var webView = WKWebView()  
  7.     override func viewDidLoad() {  
  8.         super.viewDidLoad()  
  9.         view.backgroundColor = .white  
  10.         //webView  
  11.         webView.frame = view.frame  
  12.         let config = WKWebViewConfiguration()  
  13.           
  14.         //偏好设置  
  15.         config.preferences = WKPreferences()  
  16.         //字体  
  17.         config.preferences.minimumFontSize = 10  
  18.         //设置js跳转  
  19.         config.preferences.javaScriptEnabled = true  
  20.         //不自动打开窗口  
  21.         config.preferences.javaScriptCanOpenWindowsAutomatically = false  
  22.         //web内容处理池  
  23.         config.processPool = WKProcessPool()  
  24.         //js和webview内容交互  
  25.         config.userContentController = WKUserContentController()  
  26.         //注入js对象名称为appmodel,当js通过appmodel来调用  
  27.         //可以在wkscriptMessagehandler的代理中接收到  
  28.         config.userContentController.add(self, name"AppModel")  
  29.           
  30.         //webView  
  31.         webView = WKWebView(frame: view.bounds, configuration: config)  
  32.         view.addSubview(webView)  
  33.         let url = Bundle.main.url(forResource: "JSCallOC", withExtension"html")  
  34.         webView.load(URLRequest(url:url!))  
  35.           
  36.         //swift操作js的按钮  
  37.         let button = UIButton.init()  
  38.         button.frame = CGRect(x:100,y:100,width:100,height:100)  
  39.         button.backgroundColor = .red  
  40.         button.addTarget(self, action: #selector(doButton), for.touchDown)  
  41.         view.addSubview(button)  
  42.     }  
  43.       
  44.     func doButton() {  
  45.         webView.evaluateJavaScript("log(10)") { (str, error) in  
  46.             if error != nil {  
  47.                 print("\(error)")  
  48.             } else {  
  49.                 print(str ?? "")  
  50.             }  
  51.         }  
  52.     }  
  53.       
  54.     func loadJsFile(name: String) -> String {  
  55.         let path = Bundle.main.path(forResource: name, ofType"js")  
  56.         let jsScript = try! String(contentsOfFile: path!, encoding: String.Encoding.utf8)  
  57.         return jsScript  
  58.     }  
  59. }  
  60.   
  61. extension SwiftCallJSController: WKScriptMessageHandler {  
  62.     func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {  
  63.         print(message.body)  
  64.     }  
  65. }  

在html里面要添加的的代码,显示swift传过去的参数:

[objc] view plain copy
  1. function log(n) {  
  2.         document.getElementById("result").innerText = n;  
  3.     }  

这样就实现了Swift给js传参数和调用!

如果转载请注明转于:AirZilong的博客


Swift WKWebView的js调用swift

最近项目需求,需要用到JavaScriptCore和WebKit,但是网上的资源有限,而且比较杂,都是一个博客复制另外一个博客,都没有去实际敲代码验证,下面给大家分享一下我的学习过程。

js调用Swift

controller的代码:

[objc] view plain copy
  1. import UIKit  
  2. import WebKit  
  3.   
  4. class JSCallSwiftController: UIViewController {  
  5.     var webView = WKWebView()  
  6.     override func viewDidLoad() {  
  7.         super.viewDidLoad()  
  8.         setWebView()  
  9.     }  
  10.     func setWebView() {  
  11.         webView.frame = view.frame  
  12.         let config = WKWebViewConfiguration()  
  13.           
  14.         //偏好设置  
  15.         config.preferences = WKPreferences()  
  16.         //字体  
  17.         config.preferences.minimumFontSize = 10  
  18.         //设置js跳转  
  19.         config.preferences.javaScriptEnabled = true  
  20.         //不自动打开窗口  
  21.         config.preferences.javaScriptCanOpenWindowsAutomatically = false  
  22.         //web内容处理池  
  23.         config.processPool = WKProcessPool()  
  24.         //js和webview内容交互  
  25.         config.userContentController = WKUserContentController()  
  26.         //注入js对象名称为appmodel,当js通过appmodel来调用  
  27.         //可以在wkscriptMessagehandler的代理中接收到  
  28.         config.userContentController.add(self, name"AppModel")  
  29.           
  30.         //webView  
  31.         webView = WKWebView(frame: view.bounds, configuration: config)  
  32.         view.addSubview(webView)  
  33.         let url = Bundle.main.url(forResource: "JSCallOC", withExtension"html")  
  34.         webView.load(URLRequest(url:url!))  
  35.     }  
  36. }  
  37.   
  38. extension JSCallSwiftController: WKNavigationDelegate {  
  39.       
  40. }  
  41.   
  42. extension JSCallSwiftController: WKScriptMessageHandler {  
  43.     func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {  
  44.         print(message.body)  
  45.     }  
  46. }  

html里面要写入的代码:

[objc] view plain copy
  1. function log(n) {  
  2.         window.webkit.messageHandlers.AppModel.postMessage({body:n})  
  3.     }  
这样就很简单的实现了js调用swift的方法;

如果转载请注明转于:AirZilong的博客


原创粉丝点击