首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIWebview迁移到WKWebview中的嵌套WKWebview

UIWebview迁移到WKWebview中的嵌套WKWebview
EN

Stack Overflow用户
提问于 2020-07-25 17:15:37
回答 1查看 173关注 0票数 1

在UIWebview实现中,我有如下内容:-

代码语言:javascript
复制
if let pageBody = webView?.stringByEvaluatingJavaScript(from: "document.body.innerHTML")  {
           if pageBody.contains("xyz") {
               return webView?.stringByEvaluatingJavaScript(from:
                   "document.getElementById('xyz').innerHTML")
           }
        }

我想把这个迁移到WKWebview:-

我这样做了,但是返回值在嵌套的完成处理程序中丢失了:-

代码语言:javascript
复制
wkWebView?.evaluateJavaScript("document.body.innerHTML", completionHandler: { (pageBody, nil) in
                if let pBody = (pageBody as? String)?.contains("xyz"), pBody {
                    wkWebView?.evaluateJavaScript("document.getElementById('xyz').innerHTML", completionHandler: { (result, error) in
                        resultString = result as? String
                    })
                }
            })
return resultString
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-26 20:27:18

evaluateJavaScript是异步运行的(与stringByEvaluatingJavaScript不同,stringByEvaluatingJavaScript会等到计算完javascript并返回结果后再运行),所以resultString在返回时还没有设置好。您需要组织代码,以便在完成处理程序运行后使用javascript的结果。就像这样:

代码语言:javascript
复制
func getElementXYZ(_ completionHandler: @escaping (String?) -> Void) {
    wkWebView?.evaluateJavaScript("document.body.innerHTML") { (pageBody, nil) in
        if let pBody = (pageBody as? String)?.contains("xyz"), pBody {
            wkWebView?.evaluateJavaScript("document.getElementById('xyz').innerHTML") { (result, error) in
                completionHandler(result as? String)
            }
        }
    }
}

并调用该函数:

代码语言:javascript
复制
self.getElementXYZ { result in
    //Do something with the result here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63091244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档