gpt4 book ai didi

ios - UIWebview中的嵌套stringByEvaluatingJavaScript迁移到WKWebview

转载 作者:行者123 更新时间:2023-12-01 21:30:08 27 4
gpt4 key购买 nike

在UIWebview实现中,我有类似以下内容:

if let pageBody = webView?.stringByEvaluatingJavaScript(from: "document.body.innerHTML")  {
if pageBody.contains("xyz") {
return webView?.stringByEvaluatingJavaScript(from:
"document.getElementById('xyz').innerHTML")
}
}
我正在尝试将其迁移到WKWebview:-
我做了这样的事情,但返回值在嵌套的完成处理程序中丢失了:
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

最佳答案

evaluateJavaScript是异步运行的(不同于stringByEvaluatingJavaScript,它将等待直到评估javascript并返回结果为止),因此在返回时尚未设置resultString。您将需要组织代码,以便在运行完成处理程序之后使用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)
}
}
}
}
并调用该函数:
self.getElementXYZ { result in
//Do something with the result here
}

关于ios - UIWebview中的嵌套stringByEvaluatingJavaScript迁移到WKWebview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63091244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com