WKWebView.evaluateJavaScript 函数不起作用

问题描述 投票:0回答:1

我正在尝试进行一项调查,其中通过 .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
    }
} 
javascript html swift sockets wkwebview
1个回答
0
投票

evaluateJavaScript函数异步工作。确保在网页完全加载后评估 JavaScript 代码。在您的代码中,您在构造 JavaScript 字符串后立即调用评估JavaScript。确保在 WebView 完成加载 Web 内容后调用它。

© www.soinside.com 2019 - 2024. All rights reserved.