参考: https://00red.com/blog/2016/03/22/teacher-swift-uiwebview-javascript/
一, JS 触发 SWIFT
swift 代码
import UIKit import JavaScriptCore class ViewController: UIViewController,UIWebViewDelegate { var webView: UIWebView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let path = Bundle.main.path(forResource: "test", ofType: "html") let url = NSURL(fileURLWithPath: path!) let request = NSURLRequest(url: url as URL) webView = UIWebView(frame: self.view.frame) webView.loadRequest(request as URLRequest) self.view.addSubview(webView); // let jsContext = self.webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext jsContext?.setObject(JavaScriptMethod(), forKeyedSubscript: "callSwift" as (NSCopying & NSObjectProtocol)!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } //必须加前面的@objc @objc protocol JavaScriptMethodProtocol: JSExport { //参数前面必须写上_下划线 func postContent(_ value: String, _ number: String) func postContent2(_ value: String) } class JavaScriptMethod : NSObject, JavaScriptMethodProtocol { func postContent(_ value: String, _ number: String) { //方法名postContent print("dd"+value); } func postContent2(_ value: String){ print("str:"+value); } }
test.html
<html> <meta charset="utf-8" /> <body> <BR><BR> <button onclick='callSwift.postContent("我是value1", 2)'>Call Swift</button> <button onclick='callSwift.postContent2("我是一个字符串啊")'>Call Swift2</button> </body> </html>
html 和SWIFT 文件在同一个目录
2 : 第二种通过 消息 通知的 形式
先是swift
import UIKit import Foundation import JavaScriptCore import WebKit; class Page1: UIViewController,WKScriptMessageHandler{ override func viewDidLoad() { super.viewDidLoad() let conf = WKWebViewConfiguration() conf.userContentController.add(self as! WKScriptMessageHandler, name: "NOTIFY") let web = WKWebView(frame: self.view.frame, configuration: conf) self.view.addSubview(web) let url:String = "http://192.168.2.188/9/2.php" web.load(NSURLRequest(url: NSURL(string: url) as! URL) as URLRequest); } func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if message.name == "NOTIFY" { if let dic = message.body as? NSDictionary { print(dic["link"]) print(dic["image"]) } } } }
然后 php 文件里的JS 通过如下JS 代码触发
var data = {}; data.link = "aaa"; data.image = "iiiii"; webkit.messageHandlers.NOTIFY.postMessage(data);
二、swift 触发 js
在上面的html 中增加 JS 代码
<script type="text/javascript"> function doFun(str){ alert(str); } </script>
在上面的swift 中增加代码
self.webView.stringByEvaluatingJavaScript(from: "doFun('你执行了DOFUN')")
其中 执行JS 代码 需要等HTML 加载完,可通过代理监控事件判断
另: 如果存在 300毫秒点击延迟可 改用 WKWebView 并 在html 的meta 中设置 user-scalable=0
** swift 通过执行 js 返回 执行 结果 ,比如 通过JS 的方法 获取页面的title
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { //要执行的js 语句 let script:String = "document.title"; webView.evaluateJavaScript(script, completionHandler: { (result, error) in if result != nil { print("通过evaluateJavaScript获取的结果:"+(result as! String)); //结果就是打印出了该站的title 不过是通过js 的方法 } else { print(error ?? "Error") } }) }
相关参考: 根据某个标签的属性值获取另外一个属性值
http://mft.iteye.com/admin/blogs/2378327
相关推荐
本知识点主要聚焦于如何使用Swift对WKWebView进行封装,以及如何实现与H5页面的交互,包括调用JavaScript(JS)方法。 首先,WKWebView是WebKit框架的一部分,它取代了旧的UIWebView,提供了更好的性能和更低的内存...
5. **JavaScript互操作性**:WKWebView通过WKUserContentController允许JavaScript代码与Objective-C或Swift代码进行交互,便于实现富交互功能。 6. **Cookies同步共享**:对于跨平台需求,WKWebView可以完美解决...
基于WKWebView封装,支持>=iOS8系统,包含功能:页面加载进度条、上方导航、底部toolbar,转场动效、分享、打开appstore下载弹窗、和js交互 国际化、兼容iPad、preview(>=iOS9)、用chrome、safari打开网页、清缓存...
总之,使用Swift和WKWebView构建一个带下载功能的Web浏览界面是一个综合性的任务,涉及到网络请求、文件操作、用户交互等多个方面。通过深入理解WKWebView及其相关API,你可以创建出高性能且功能丰富的Web应用。在...
本教程将深入探讨UIWebView与JavaScript的交互机制,帮助开发者更好地理解和运用这一功能。 1. UIWebView的基本使用: UIWebView可以通过代码或Storyboard添加到项目中。创建实例后,可以通过`loadRequest:`方法...
二、JavaScript交互基础 1. stringByEvaluatingJavaScriptFromString方法:这是UIWebView的核心方法,通过该方法,我们可以向网页中的JavaScript发送命令并获取返回的结果。例如,我们可以在JavaScript中定义一个...
总结,Swift-WKWebView是Swift开发中不可或缺的组件,它提供了强大的网页展示和交互能力。通过理解其基本用法、本地数据加载、JavaScript通信以及网络请求处理,开发者可以构建出功能丰富的混合型iOS和macOS应用程序...
这个"ios-JS wkWebView交互.zip"文件似乎包含了一个示例,展示了如何在WKWebView中实现JavaScript与Swift的交互,特别是在用户界面操作如调用相机、相册,图像处理和数据传递方面。 首先,让我们深入理解WKWebView...
总之,实现iOS应用中的WKWebView和UIWebView高度自适应主要依赖于JavaScript与原生代码的交互。UIWebView通过`webViewDidFinishLoad:`代理方法,而WKWebView则利用`WKUserContentController`和`...
综上所述,"UIWebView和js交互demo1"项目主要展示了如何在iOS应用中利用UIWebView或WKWebView进行OC与JS的交互,这在实现复杂的混合式应用或者增强原生应用的Web功能时非常有用。通过这种交互方式,开发者可以充分...
WKWebView不仅提供了比旧版UIWebView更高效、更现代的渲染性能,还支持更多的API功能,使得开发者能更好地控制网页加载和交互过程。在这里,我们将深入探讨Swift-WKWebView的核心知识点,以及如何在实际开发中运用它...
在iOS应用开发中,UIWebView和WKWebView是两种常见的用于展示网页内容的控件。它们允许开发者在原生应用中嵌入HTML、CSS和JavaScript代码,实现丰富的交互体验。本篇文章将深入探讨如何在iOS应用中,特别是针对...
在iOS开发中,当涉及到应用内嵌入网页内容或者实现原生应用与Web内容的交互时,`WKWebView`是...在`jstest`这个项目中,你可能会找到更多的示例代码和具体实践,帮助你更深入地理解`WKWebView`和JavaScript的交互方式。
- **交互**:WKWebView提供了`WKUserContentController`,用于JavaScript和Objective-C/Swift之间的通信,实现网页内容与原生代码的交互。 5. **浏览进度条** 在使用WKWebView时,可以监听`WKNavigation`代理方法...
8. **WKWebView 封装库**:在实际项目中,开发者通常会创建一个自定义的WKWebView类,封装常用功能,如加载网页、设置用户代理、处理JavaScript交互等,以提供统一的调用接口,简化使用。 在“WKWeView”这个文件中...
WKWebView同样支持JavaScript与原生代码的交互,但API有所不同,需要使用`WKWebViewConfiguration`和`WKUserContentController`来实现。 总结,UIWebView与JavaScript的交互是iOS开发中的重要技能,允许开发者结合...
在iOS应用开发中,有时我们需要在原生Swift代码和网页内容之间进行交互,这通常涉及到WebView的使用。Swift-iOS原生webView与JS交互工具,如`SFWebViewBridge`,就是为了实现这一目标而设计的。它允许开发者在Swift...
相比UIWebView,WKWebView有更好的性能和JavaScript执行效率,同时对现代Web标准支持更全面。在本项目中,WKWebView用于展示网页内容,提供了一个更流畅的用户体验。 2. **加载进度条**: 为了提供更好的用户体验,...
`WKWebView`允许在Swift应用中内嵌网页内容,并提供了与JavaScript交互的能力。通过实现`WKScriptMessageHandler`协议,我们可以监听和响应JavaScript发送的消息。例如,当JavaScript调用`window.webkit.message...
在iOS开发中,WKWebView是苹果提供的一种用于展示网页内容的组件,它是UIWebView的替代品,具有更好的性能和安全性。本教程将深入探讨WKWebView的加载机制以及如何实现JavaScript与Objective-C/Swift的交互。 一、...