WKWebView 是苹果提供的用于在 iOS 应用中嵌入网页内容的组件,它是 WebKit 框架的一部分。通过 WKWebView,开发者可以在应用中展示网页内容,并且可以与网页中的 JavaScript 进行交互。
WKWebView 提供了与 JavaScript 交互的能力,允许 iOS 应用执行 JavaScript 代码,并且可以接收 JavaScript 发送的消息。这种交互是通过 WKScriptMessageHandler 接口实现的,它允许应用注册一个或多个消息处理程序来接收来自网页的消息。
以下是一个简单的示例,展示如何在 Swift 中设置 WKWebView 并监听来自 JavaScript 的消息:
import UIKit
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
config.userContentController.add(self, name: "callbackHandler")
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 == "callbackHandler", let messageBody = message.body as? String {
print("Received message from JS: \(messageBody)")
}
}
}
在网页端,你可以使用以下 JavaScript 代码发送消息到 iOS 应用:
window.webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript!");
问题:WKWebView 中的 JavaScript 消息没有被正确接收。
原因:
postMessage
的方式可能有误。解决方法:
WKWebViewConfiguration
中正确添加了消息处理程序。postMessage
的调用是否正确。WKNavigationDelegate
的方法来确认加载状态。func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// 网页加载完成后的处理
}
通过以上步骤,你应该能够解决 WKWebView 监听 JavaScript 消息的问题。
领取专属 10元无门槛券
手把手带您无忧上云