我正在尝试进行一项调查,其中通过 .evaoluteJavaScript 手动单击按钮。每当收到传入消息时就会调用 Javascript 函数(我稍微缩短了它)。基本上除了评估 Javascript 之外一切都有效:
如果我在 Webview 中运行这个确切的 Javascript:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
setupButtonScripts(webView: webView)
}
它工作得很好,所以我不认为这是 Javascript 语法或任何问题。最后运行打印语句。为什么会发生这种情况?
init(_ parent: WebViewWrapper) {
self.parent = parent
self.webView = WKWebView() // Initialize the webView property
self.messageHandler = MessageHandler(address: my ipad, port: ___)
super.init()
messageHandler.messageReceivedHandler = { [weak self] message in
DispatchQueue.main.async {
self?.handleButtonActionForMessage(message, webView: self?.webView ?? WKWebView())
}
}
}
func handleButtonActionForMessage(_ message: String, webView: WKWebView) {
case "one":
let script = """
var answer1 = document.getElementById("ANSWER_1");
if (answer1) {
answer1.click();
}
"""
webView.evaluateJavaScript(script, completionHandler: nil)
print("ran this function")
default:
break
}
}
evaluateJavaScript函数异步工作。确保在网页完全加载后评估 JavaScript 代码。在您的代码中,您在构造 JavaScript 字符串后立即调用评估JavaScript。确保在 WebView 完成加载 Web 内容后调用它。