iOS主动调用H5方法
在iOS开发中,我们常常需要在原生App中加载H5页面,并且需要与H5页面进行数据交互。iOS提供了一种方式,可以实现iOS主动调用H5方法,从而实现数据的传递和交互。本文将介绍如何在iOS中主动调用H5方法,并提供代码示例。
WebView加载H5页面
在iOS中,我们可以使用UIWebView
或者WKWebView
来加载H5页面。这里我们以WKWebView
为例。
首先,我们需要创建一个WKWebView
实例,并加载一个H5页面:
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
// ...
}
以上代码创建了一个WKWebView
实例,并加载了一个名为`
H5方法调用原理
在H5页面中,我们可以通过window.webkit.messageHandlers
对象来调用iOS的方法。具体步骤如下:
- 在H5页面中注册一个方法,用于接收iOS传递的数据:
// H5页面中的代码
function receiveDataFromiOS(data) {
// 处理传递过来的数据
}
- 在iOS中调用H5页面中注册的方法,并传递数据:
// iOS中的代码
let script = "receiveDataFromiOS('Hello, H5!')"
webView.evaluateJavaScript(script, completionHandler: nil)
以上代码会在H5页面中调用receiveDataFromiOS
方法,并传递字符串Hello, H5!
作为参数。
iOS主动调用H5方法
在iOS中主动调用H5方法的步骤如下:
- 在H5页面中注册一个方法,用于iOS主动调用:
// H5页面中的代码
function callMeFromiOS() {
// 处理iOS主动调用逻辑
}
- 在iOS中调用H5页面中注册的方法:
// iOS中的代码
let script = "callMeFromiOS()"
webView.evaluateJavaScript(script, completionHandler: nil)
以上代码会在H5页面中调用callMeFromiOS
方法。
完整示例
以下是一个完整的示例,演示了如何在iOS中加载H5页面,并主动调用H5方法,以及H5页面接收iOS传递的数据:
import WebKit
class ViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
let userContentController = WKUserContentController()
userContentController.add(self, name: "iOSHandler")
webConfiguration.userContentController = userContentController
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
// WKScriptMessageHandler method
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "iOSHandler" {
// 处理来自H5页面的消息
let data = message.body as! String
print("Received data from H5: \(data)")
}
}
// 在iOS中调用H5方法
func callH5Method() {
let script = "callMeFromiOS()"
webView.evaluateJavaScript(script, completionHandler: nil)
}
// ...
}
以上代码中,我们通过WKUserContentController
来注册了一个名为iOSHandler
的消息处理器。在H5页面中,我们可以通过window.webkit.messageHandlers.iOSHandler.postMessage()
来向iOS发送消息。
在userContentController(_:didReceive:)
方法中,我们可以处理来自H5页面的消息,这里通过message.body
来获取传递的数据。
在callH5Method()
方法中,我们使用evaluateJavaScript(_:completionHandler:)
方法来调用