WKWebView.evaluateJavaScript方法无法正常工作的问题求助
WKWebView.evaluateJavaScript方法无法正常工作的问题求助
我现在在做一个调研类的需求,需要通过.evaluateJavaScript来手动触发网页里的按钮点击。逻辑是收到外部消息时调用对应的JS函数(代码我做了精简)。现在其他功能都正常,唯独调用evaluateJavaScript没效果,实在搞不懂哪里出问题了。
情况是这样的:如果我把这段JS代码放在webView(_:didFinish:)方法里执行,比如下面这段代码,完全能正常工作,说明JS语法本身肯定没问题:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { setupButtonScripts(webView: webView) }
但我把JS调用放在消息回调里就不行了,虽然最后面的print("ran this function")能正常输出,说明这个方法确实被执行了,但网页里的按钮就是没反应。我的相关代码如下:
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) { switch message { 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 } }
有没有大佬能帮我分析下这是咋回事啊?
备注:内容来源于stack exchange,提问作者user22014972
相关产品推荐
相关产品推荐

