在iOS开发中,调用JavaScript通常是通过WKWebView
或SFSafariViewController
来实现的,这是iOS提供的用于展示网页内容的组件,它们都支持与JavaScript的交互。
基础概念:
UIWebView
性能更好,内存占用更低。相关优势:
应用场景:
调用方法:
使用WKWebView
时,可以通过WKScriptMessageHandler
协议来接收JavaScript发送的消息,也可以通过evaluateJavaScript(_:completionHandler:)
方法来执行JavaScript代码。
示例代码(Swift):
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: .zero, configuration: config)
view.addSubview(webView)
if let url = URL(string: "https://yourwebsite.com") {
webView.load(URLRequest(url: url))
}
}
// 接收JavaScript发送的消息
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "nativeApp", let messageBody = message.body as? String {
print("Received message from JavaScript: \(messageBody)")
}
}
// 调用JavaScript代码
func callJavaScript() {
let jsCode = "alert('Hello from Swift!');"
webView.evaluateJavaScript(jsCode) { (result, error) in
if let error = error {
print("Error calling JavaScript: \(error)")
} else {
print("JavaScript executed successfully")
}
}
}
}
在网页端,你可以通过window.webkit.messageHandlers.nativeApp.postMessage
来发送消息给Swift代码:
window.webkit.messageHandlers.nativeApp.postMessage("Hello from JavaScript!");
常见问题及解决方法:
WKWebView
配置了正确的WKUserContentController
,并且JavaScript代码中的消息处理器名称与Swift代码中注册的名称一致。evaluateJavaScript(_:completionHandler:)
的异步特性来避免阻塞UI。确保你的WKWebView
已经正确加载了网页内容,并且JavaScript代码是在页面加载完成后执行的,这样可以避免很多常见的问题。
领取专属 10元无门槛券
手把手带您无忧上云