在iOS开发中,前端(通常是Swift或Objective-C编写的UIKit或SwiftUI视图)与后台JavaScript代码的交互可以通过多种方式实现,最常见的是使用WKWebView
或SFSafariViewController
中的JavaScript桥接。
WKWebView
的evaluateJavaScript(_:completionHandler:)
方法。WKScriptMessageHandler
协议实现。import WebKit
class ViewController: UIViewController {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: self.view.frame)
self.view.addSubview(webView)
if let url = URL(string: "https://example.com") {
let request = URLRequest(url: url)
webView.load(request)
}
}
func callJavaScript() {
let jsString = "alert('Hello from Swift!');"
webView.evaluateJavaScript(jsString) { (result, error) in
if let error = error {
print("Error: \(error)")
} else {
print("JavaScript executed successfully")
}
}
}
}
首先,需要在创建WKWebView
时设置WKScriptMessageHandler
:
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let contentController = WKUserContentController()
contentController.add(self, name: "nativeApp")
let config = WKWebViewConfiguration()
config.userContentController = contentController
webView = WKWebView(frame: self.view.frame, configuration: config)
self.view.addSubview(webView)
if let url = URL(string: "https://example.com") {
let request = URLRequest(url: url)
webView.load(request)
}
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "nativeApp", let messageBody = message.body as? String {
print("Received message from JavaScript: \(messageBody)")
}
}
}
然后,在网页的JavaScript代码中,可以通过window.webkit.messageHandlers.nativeApp.postMessage
来发送消息:
window.webkit.messageHandlers.nativeApp.postMessage('Hello from JavaScript!');
如果在交互过程中遇到问题,可以采取以下步骤进行排查:
通过以上方法,可以有效地实现iOS前端与后台JavaScript代码的交互,并解决可能出现的问题。
领取专属 10元无门槛券
手把手带您无忧上云