WKWebView goBack(_:) evaluateJavaScript 如果返回超过 2 个历史则失败
WKWebView goBack(_:) evaluateJavaScript Fails if going back more than 2 in history
我有一个函数可以追溯到我的 WKWebView 历史记录。这按预期工作,除非回溯历史超过 2 个。此时 evaluateJavasScript
功能不再发生在正确的历史记录项上。
func backButtonClicked() {
webView.goBack()
webView.evaluateJavaScript("arrivedFromBackButton()") { (response, error) -> Void in
print(response) // webpage outputs the title of the page
}
}
页面标题依次为:主页 -> 用户信息 -> 详细信息 -> 历史记录
如果在 "History" 上,我会一遍又一遍地调用 backButtonClicked()
,此输出会发生:
- 详情
- 用户信息
- 用户信息
evaluateJavaScript
似乎发生在上一页上,但只有当我尝试返回历史记录中的 3 个或更多位置时才会发生。有没有人知道是什么原因造成的?我已经将 evaluateJavaScript
包裹在 DispatchQueue.main.async
中只是为了确保它在同一个线程上,但仍然没有任何运气。
使用 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
似乎解决了我的问题。它也在 goBack(_:)
函数的末尾调用。我只需要创建一个布尔变量,可以检查它是否应该触发 evaluateJavaScript
我有一个函数可以追溯到我的 WKWebView 历史记录。这按预期工作,除非回溯历史超过 2 个。此时 evaluateJavasScript
功能不再发生在正确的历史记录项上。
func backButtonClicked() {
webView.goBack()
webView.evaluateJavaScript("arrivedFromBackButton()") { (response, error) -> Void in
print(response) // webpage outputs the title of the page
}
}
页面标题依次为:主页 -> 用户信息 -> 详细信息 -> 历史记录
如果在 "History" 上,我会一遍又一遍地调用 backButtonClicked()
,此输出会发生:
- 详情
- 用户信息
- 用户信息
evaluateJavaScript
似乎发生在上一页上,但只有当我尝试返回历史记录中的 3 个或更多位置时才会发生。有没有人知道是什么原因造成的?我已经将 evaluateJavaScript
包裹在 DispatchQueue.main.async
中只是为了确保它在同一个线程上,但仍然没有任何运气。
使用 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
似乎解决了我的问题。它也在 goBack(_:)
函数的末尾调用。我只需要创建一个布尔变量,可以检查它是否应该触发 evaluateJavaScript