使用evaluateJavascript从WKWebView获取HTML,然后将其存储在变量中(使用Swift)

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

我有用户使用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,我可以稍后进行变异。谢谢!

ios swift parsing wkwebview completionhandler
1个回答
2
投票

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

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

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