WKWebView 是苹果提供的用于在 iOS 应用中嵌入网页内容的组件,它允许原生应用与网页之间进行交互。将值从原生应用传递到 JavaScript 可以通过多种方式实现,以下是一些基础概念和相关方法:
evaluateJavaScript(_:completionHandler:)
方法执行 JavaScript 代码。以下是一个简单的示例,展示如何从 Swift 原生代码向 JavaScript 传递数据:
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
let userContentController = WKUserContentController()
userContentController.add(self, name: "nativeBridge")
config.userContentController = userContentController
webView = WKWebView(frame: view.bounds, configuration: config)
view.addSubview(webView)
if let url = URL(string: "https://example.com/page.html") {
let request = URLRequest(url: url)
webView.load(request)
}
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "nativeBridge", let body = message.body as? [String: Any], let data = body["data"] as? String {
// 处理从网页发送过来的消息
print("Received data from JS: \(data)")
// 将数据传递回 JavaScript
let jsString = "receiveNativeData('\(data)')"
webView.evaluateJavaScript(jsString, completionHandler: nil)
}
}
func sendDataToJS() {
let data = "Hello from Swift!"
let jsString = "receiveNativeData('\(data)')"
webView.evaluateJavaScript(jsString, completionHandler: nil)
}
}
<!DOCTYPE html>
<html>
<head>
<title>WKWebView Example</title>
<script>
function receiveNativeData(data) {
console.log("Received data from Swift: " + data);
document.getElementById('dataDisplay').innerText = data;
}
</script>
</head>
<body>
<h1>Data from Swift:</h1>
<p id="dataDisplay"></p>
</body>
</html>
evaluateJavaScript(_:completionHandler:)
方法可以避免这个问题。evaluateJavaScript(_:completionHandler:)
: 安全且高效地执行 JavaScript 代码。completionHandler
中处理可能的错误。通过以上方法,可以实现从 Swift 到 JavaScript 的数据传递,并确保应用的安全性和性能。
领取专属 10元无门槛券
手把手带您无忧上云