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(),此输出会发生:

  1. 详情
  2. 用户信息
  3. 用户信息

evaluateJavaScript 似乎发生在上一页上,但只有当我尝试返回历史记录中的 3 个或更多位置时才会发生。有没有人知道是什么原因造成的?我已经将 evaluateJavaScript 包裹在 DispatchQueue.main.async 中只是为了确保它在同一个线程上,但仍然没有任何运气。

使用 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 似乎解决了我的问题。它也在 goBack(_:) 函数的末尾调用。我只需要创建一个布尔变量,可以检查它是否应该触发 evaluateJavaScript