我有用户使用WKWebView登录到网站,然后要解析页面的HTML。我是Swift / iOS Development的新手(我在学习过程中一直在学习)。我知道HTML标签的id(我正在尝试获取的innerHTML(id为“dataGrid”),并希望将字符串存储在名为htmlString的变量中。我有以下代码:

var htmlString = "initial value"
webView.evaluateJavaScript("document.getElementById('dataGrid').innerHTML.toString()",
    completionHandler: { (html: Any?, error: Error?) in htmlString = html as! String})
print(htmlString)

显然这是行不通的-最后一个print语句仅显示“初始值”。大家知道,我是根据另一篇StackOverflow文章(Get HTML from WKWebview in Swift)中介绍的方法编写代码的。在其中,完成处理程序具有一个print语句,该语句实际上可用于打印HTML。但是,我不太了解补全处理程序,考虑到我对Swift的了解还不是很丰富,所以这很有意义,但这也意味着我不知道该如何修改该帖子中的代码以达到我的目的。如果有人可以引导我正确的方向,以便将页面的HTML作为string存储在一个变量中,我可以稍后对其进行突变,我将非常感激。谢谢!

最佳答案

htmlString的值为“初始值”,因为该块是在执行print语句后执行的!

如果确实在块内打印htmlString,则可以看到实际值。您必须在完成模块中完成任务。另外,完成块将在主线程中执行,因此您需要确保不阻塞主线程。

07-24 18:53
查看更多