gpt4 book ai didi

javascript - 从 evaluateJavaScript 函数的完成处理程序返回 HTML 字符串

转载 作者:可可西里 更新时间:2023-11-01 02:01:53 25 4
gpt4 key购买 nike

我知道我不是第一个问这个问题的人,但我无法解决这个问题。我正在尝试使用 Swift 3 在 Xcode 中使用 evaluateJavaScript 从 HTML 中获取一段字符串,并且这段文本在完成处理程序中称为 value,所以我确实喜欢这个:

var userName = String()

func takeData() {
webView.evaluateJavaScript("document.querySelectorAll('.name')[0].innerHTML") { (value, error) in

if let valueName = value as? String {
self.userName = valueName
}
print(value)
print(error)
}

}

print(" The name is : \(self.userName)")

问题是控制台只是打印:The name is ()

最佳答案

问题是您在异步函数完成执行之前就打印了值。您有多种解决方案来解决此问题。您可以实现 takeData 以将 completionHandler 作为其输入参数之一,使用 GCD 使您的语句按预期顺序执行或使用第 3 方库,例如PromiseKit为您处理异步请求,因此它们的行为就像具有返回值的普通函数。

我会给你一个完成处理程序的例子:

func takeData(completionHandler: @escaping (_ userName: String?) -> Void){
webView.evaluateJavaScript("document.querySelectorAll('.name')[0].innerHTML") { (value, error) in
if let valueName = value as? String {
completionHandler(valueName)
}
print(value)
print(error)
completionHandler(nil)
}
}

您可以像这样使用 completionHandler 的值:

takeData(completionHandler: { userName in
print(userName)
})

关于javascript - 从 evaluateJavaScript 函数的完成处理程序返回 HTML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45689874/

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