在 Swift WKWebView 中的完成处理程序中将 html 数据保存在变量中

Posted

技术标签:

【中文标题】在 Swift WKWebView 中的完成处理程序中将 html 数据保存在变量中【英文标题】:Saving html data in variable from completion handler in Swift WKWebView 【发布时间】:2018-05-20 05:10:48 【问题描述】:

我正在尝试从网站上抓取数据,而我想要的数据位于 span 标签中。到目前为止,我所做的是:

var str: Any?
webView.evaluatejavascript("innerDoc.getElementById(spanId).innerhtml", completionHandler: 
     (html: Any?, error: Error?) in
       str = html

    )
print(str)

但是当我这样做时,我会得到零。如果我用print(html) 代替str = html,我会得到我想要的输出。

我在这里做错了什么?为什么我不能将该值存储在变量中?

【问题讨论】:

【参考方案1】:

评估 JavaScript 需要 WKWebView 一些时间。在这种情况下,print(str) 语句很可能发生在评估 JS 脚本之前。尝试将它移动到评估语句的完成处理程序中,看看它是否有效。

【讨论】:

以上是关于在 Swift WKWebView 中的完成处理程序中将 html 数据保存在变量中的主要内容,如果未能解决你的问题,请参考以下文章

WKWebview 导航响应方法在单击 webview 中的完成按钮时不会被调用

从 swift 评估 javascript 函数,在完成处理程序中得到 nil

Swift WKWebView 处理凭据弹出窗口

如何在swift 4中从WKWebView中的网页中删除DIV标签?

使用 Javascript 处理 HTML 和 Swift 之间的交互

关于在 Swift 中删除 WKWebView 中的 UIMenuController 默认 menuItems 的问题